在轨道上的红宝石静态页面[关闭]

问题描述 投票:1回答:3

我是Ruby on rails的新手,在一个月内我将开始关于Ruby-on-Rails的课程,但我希望在开始课程之前获得一些代码,因为我想尽可能多地学习。

我做了一个项目:

rails new portfolio

然后我做了:

rails generate controller portfolio index

要获得头版。

Rails.application.routes.draw do
  get 'portfolio/index'


  resources :company

  root 'portfolio#index'
end

然后:

rails generate controller company

控制器:

class CompanyController < ApplicationController
    def new
    end
end

然后我在views / portfolio /下面写了一个文件,名为index.html.erb,我的头版将在那里。在views / company / i下将有一个名为company的文件。

当我现在去网址:localhost:3000 /公司/公司我得到错误:

The action 'show' could not be found for CompanyController

我的CompanyController是这样的:

    class CompanyController < ApplicationController
    def new
    end
end

任何知道很多关于红宝石的人都可以给我一个指向正确方向的小指针?谢谢。

ruby-on-rails
3个回答
2
投票

从公司的单一型号和控制器开始。在index中创建一个app/controllers/companies_controller方法。然后在文件app/views/companies/index.html.erb中创建内容以检查一切是否正常,例如:

<h1> Hi! This is root page and index method in CompaniesController! </h1>

config/routes.rb中,如果您计划创建和处理多个名称,则必须为companies指定复数名称,并保留原样,如果该实体是该项目的唯一公司。此时为此资源设置复数名称,以便为CRUD创建标准路由:

resources :companies
root to: "companies#index"

有关rails guide的路线的更多信息。您可以尝试使用内置的scaffold生成器来快速生成应用程序框架:

rails generate scaffold companies

上面的命令将使用控制器中的CRUD方法和控制器方法的视图生成控制器,模型,视图和路由。 app/views/"resource_name_plural"中的每个视图都使用config/routes.rb文件中的控制器中的方法进行了调整。这就是MVC模式的工作原理。

如果你想创建静态页面,也许你应该看看high_voltage gem


1
投票

在Rails中你需要注意多元化。在为资源声明路由时,它应该始终是复数形式,除非极少数情况下资源真的是单数(只能有一个)。

Rails.application.routes.draw do
  resources :companies
end

这将通往/companies的所有公司和/companies/:id的一家公司。如果您因此尝试获取/companies/company,它将被路由到#show动作,因为/company将被解释为id。

控制器也应以复数形式命名:

# app/controllers/companies_controller.rb
class CompaniesController < ApplicationController

  before_action :set_company, only: [:show, :edit, :update, :destroy]

  # GET /companies
  def index
    @companies = Company.all
  end

  # GET /companies/:id
  def show
  end

  # ...

  private
  def set_company
    @company = Company.find(params[:id])
  end
end

您可以使用scaffold命令获取标准rails CRUD控制器的完整示例:

rails g scaffold companies

0
投票

如果您有create方法或new方法,则必须包含show方法和索引方法。

在你的路线

resources :companies
resources :portfolios

试试你的控制器:

class CompanyController < ApplicationController
    def new
    end
    def new 
    end
    def index
       @companies = Company.all 
    end
    def show 
    end
end

如果您有控制器,您可以创建视图并指出没有问题

localhost:3000/company/company

这个,我认为它应该是更像这样的东西。

localhost:3000/companies/

总是复数。您的控制器将查找方法中定义的视图。看看它是默认的,是我的一个项目的。在你的团体的地方将是公司。

enter image description here

查看视图的名称,与控制器的方法名称相同。对?

© www.soinside.com 2019 - 2024. All rights reserved.