0

ガイドラインを更新した人の 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

whereモデルのクラス メソッドUserです。@user(通常) この場合、まだインスタンス化していないユーザーのインスタンスを指します。(それはnil; だからあなたは を得ていNilClassErrorます。)

この行のさらにクリーンなバージョンは次のようになります。

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

User.find指定された user_id のユーザーを検索するため。

于 2013-02-28T02:31:04.510 に答える
1

エラーは、User ではなく @user で where を呼び出すという事実によるものです。電話するだけ

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

それが唯一の問題かどうかはわかりませんが、1つずつ対処しましょう。

于 2013-02-28T02:31:19.217 に答える