0

なぜこれを理解できるのかわかりませんが、助けていただければ幸いです。ransack を使用して検索結果を表示するときに、ユーザー モデルから属性名にアクセスしようとしています。

私のレシピコントローラはそうです

def index
  @q = Recipe.search(params[:q])
  @searchresults = @q.result(:distinct => true)
  @q.build_condition
end

def search
  index
end

そのため、検索ページに結果を出力すると、レシピ モデルから属性を選択できますが、ユーザー モデルから返されたものを取得できません (これは、インデックスに Recipe.search があるという事実と関係があると思いますか?)

意見

<% @searchresults.each do |r| %>
  <%= image_tag r.avatar.url(:thumb)%>
  <%= r.user.name%>
  <%= r.dish_name %>
  <%= r.difficulty %>
  <%= r.preperation_time %>
<% end %>

これで未定義のメソッド名を取得します

レシピモデル

belongs_to :user

ユーザーモデル

has_many :recipes

私は何が欠けていますか、何か単純なものを推測していますか?

ありがとうございました

4

1 に答える 1

1

一般に、関連付けを処理するのがはるかに難しくなるため、関連付けメソッドを一緒にチェーンすることは望ましくありませんnil(これがここで起こっていることだと思います: r.userisnilnil.nameis は未定義のメソッドです)。

Rails には組み込みのデリゲーターがあり、これを回避するために使用できます。

class Recipe < ActiveRecord::Base
  belongs_to :user
  delegate :name, :to => :user, :prefix => :user, :allow_nil => true
end

これにより、ユーザーが存在する場合と存在しない場合にr.user_name名前を返す、呼び出されるレシピ インスタンス メソッドが定義されます。nil

于 2012-12-18T19:16:18.613 に答える