知道user_id,显示用户profile_name

时间:2013-02-28 02:26:10

标签: ruby-on-rails ruby-on-rails-3

我在我的指南模型中添加了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获取配置文件名称?

3 个答案:

答案 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

whereUser模型上的类方法。 @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

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