0

我在我的指南模型中添加了一个 updated_by 属性,它存储了更新指南的人的 user_id。我想在我的显示视图中显示这个作为 update_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 获取配置文件名称?

4

3 回答 3

2

您需要将查找器作为类方法而不是对象方法来调用。

@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
于 2013-02-28T02:30:00.347 回答
1

这一行:

@created = @user.where(:id=>@guideline.updated_by).first.profile_name

应该读:

@created = User.where(:id=>@guideline.updated_by).first.profile_name

whereUser模型上的类方法。@user在这种情况下,(通常)指的是您尚未实例化的用户实例。(它是nil;这就是为什么你得到NilClassError.)

这条线的一个更干净的版本是:

@created = User.find(@guildeline.updated_by).profile_name

由于User.find查找给定 user_id 的用户。

于 2013-02-28T02:31:04.510 回答
1

该错误是由于您在 @user 上调用 where 而不是在 User 上调用。打电话

@created = User.where(:id=>@guideline.updated_by).first.profile_name

不确定这是否是唯一的问题,但让我们一个一个地处理它们。

于 2013-02-28T02:31:19.217 回答