静态页面在轨道上的ruby

时间:2018-03-01 11:54:27

标签: ruby-on-rails

我是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 / company / company我收到错误:

The action 'show' could not be found for CompanyController

我的公司控制器就是这样:

    class CompanyController < ApplicationController
    def new
    end
end

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

3 个答案:

答案 0 :(得分: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 :(得分: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

答案 2 :(得分: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

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