【问题标题】:error of undefined method `id' for nil:NilClassnil 的未定义方法“id”错误:NilClass
【发布时间】:2018-12-20 02:46:01
【问题描述】:

我是 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 查看每个项目,我应该如何创建它?

【问题讨论】:

  • show 方法在哪里?
  • 如何创建show方法,里面有什么参数
  • @AlbertConrad:RoR 遵循约定:视图名称与文件夹中的操作名称相同,文件夹名称与控制器名称相同。在您的代码中,您已经粘贴了显示页面的代码,但我在您的控制器中看不到显示操作的代码。另请在您的问题中粘贴错误堆栈跟踪。
  • 即使没有 show 方法也不用担心,因为 Rails 更喜欢约定而不是配置,但即使在任何过滤器中也没有定义 @item

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


【解决方案1】:

这是我的展示页面

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

更新:

只需添加到 ItemsController

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

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

我认为您需要在 guides 中阅读更多有关 Rails 控制器的信息

顺便说一句:在ruby 中使用snake_case 来命名方法是一个惯例。应该是“item_params”,而不是“item_Params”

【讨论】:

  • 显示页面是items/:id 我想通过他们的ID查看每个项目,我将如何创建它
  • @AlbertConrad,我更新了答案。抱歉,忘记通知您
【解决方案2】:

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

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

您可以使用 find 方法在您的项目模型中找到您的项目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多