nil:NilClass的未定义方法'id'的错误

时间:2018-12-20 02:46:02

标签: ruby-on-rails ruby ruby-on-rails-4

我是Rails的新手,我有这个no method error

show.html.erb

<h1>Profile Page for <%= @item.id %></h1>
<p><%= @item.content %></p>

items_controller.rb

class ItemsController < ApplicationController
    def new
        @item = Item.new
    end

    def create
        item = Item.new(item_Params)
        if item.save
            redirect_to user_path(item.user)
        else
            render 'new'
        end
    end

private

def item_Params
    params.require(:item).permit(:user_id, :content)
end
end

我想为items/:id创建一个显示页面,并且希望能够通过它们的ID查看每个项目,我应该如何创建它?

2 个答案:

答案 0 :(得分:1)

  

这是我的表演页面

显示哪个资源的页面?是/users/:id(因为您正在重定向到它)还是items/:id?无论如何,您需要在相应控制器的show动作中定义@item。如果您添加有关相应控制器和用户项关联的更多信息,我可以为您提供帮助

更新:

只需添加到ItemsController

def show
  @item = Item.find(params[:id])
end

确保在resources :items中有一行routes.rb

我认为您需要在guides

中阅读有关rails控制器的更多信息。

顺便说一句:红宝石中的一个约定是使用snake_case进行方法命名。应该是“ item_params”,而不是“ item_Params”

答案 1 :(得分:0)

您需要添加用于显示页面的显示操作,然后找到对应于其ID的项目。因此,您只需在控制器中编写以下操作即可。

def show
 @item = Item.find(params[:id])
end

您可以使用查找方法在商品模型中找到商品。