我在我的指南模型中添加了updated_by属性,该模型存储更新指南的人员的user_id。我想在我的节目视图中显示这个作为updated_by
的人的profile_name 在guidelines_controller.rb中:
def update
@guideline = Guideline.find(params[:id])
respond_to do |format|
if @guideline.update_attributes(params[:guideline])
@guideline.update_attribute(:updated_by, current_user.id)
这似乎工作正常,并将当前用户的id分配给updated_by。
def show
@guideline = Guideline.find(params[:id])
@created = @user.where(:id=>@guideline.updated_by).first.profile_name
然后是我的节目视图
<%= @created %>
错误是
NoMethodError (undefined method `where' for nil:NilClass):
app/controllers/guidelines_controller.rb:137:in `show'
如何从updated_by id获取配置文件名称?
答案 0 :(得分:2)
您需要将finder称为类方法而不是对象方法。
@created = User.where(:id => @guideline.updated_by ).first.profile_name
或清洁
@created = User.find(@guideline.updated_by).profile_name
您也可能需要按@guideline.updated_by.id
而不是@guideline.updated_by
进行搜索。在那种情况下,它将是:
@created = User.find(@guideline.updated_by.id).profile_name
答案 1 :(得分:1)
这一行:
@created = @user.where(:id=>@guideline.updated_by).first.profile_name
应为:
@created = User.where(:id=>@guideline.updated_by).first.profile_name
where
是User
模型上的类方法。 @user
(通常)是指用户的实例,在这种情况下,您尚未实例化。 (这是nil
;这就是你获得NilClassError
的原因。)
这一行的更清晰版本将是:
@created = User.find(@guildeline.updated_by).profile_name
由于User.find
找到给定user_id的用户。
答案 2 :(得分:1)
该错误是由于您在@user上调用的位置,而不是在User上。只需致电
@created = User.where(:id=>@guideline.updated_by).first.profile_name
不确定这是否是唯一的问题,但让我们一个一个地处理它们。