我有一个管理命名空间,其中有项目作为资源:
namespace :admin do
resources :items
end
位于 app / controllers / admin / 中的我的项目控制器如下:
module Admin
class ItemsController < ApplicationController
def show
end
private
def set_item
@item = Item.find(params[:id])
end
end
end
我遇到的问题是在显示视图中显示数据:admin / items#show
由于我有一个管理名称空间,因此似乎无法像开始尝试名称空间和作用域之前一样显示数据。
<p>
<strong>Tittle:</strong>
<%= @item.tittle %>
</p>
<p>
<strong>Desciption:</strong>
<%= @item.description %>
</p>
<!-- More item attributes -->
我得到的错误是:
undefined method `tittle' for nil:NilClass
答案 0 :(得分:0)
您的show方法没有将@item
设置为任何值。
尝试
def show
@item = Item.find(params[:id])
end
答案 1 :(得分:0)
您已经在控制器中定义了方法set_item
,但尚未在show
动作中调用该方法。如下添加before_action
:
module Admin
class ItemsController < ApplicationController
before_action :set_item, only: [:show]
def show
end
private
def set_item
@item = Item.find(params[:id])
end
end
end
答案 2 :(得分:0)
您没有在任何地方致电set_item
。可以直接在show方法中调用该方法,也可以通过在show方法上方放置以下内容来在before操作中调用它
before_action :set_item, only: :show