不知道为什么我可以解决这个问题但是会感谢一些帮助。我在尝试使用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
我缺少什么,简单的猜测?
谢谢
答案 0 :(得分:1)
通常,您不希望将关联方法链接在一起,因为这会使处理nil
关联变得更加困难(我假设这里发生了什么:r.user
是nil
,并且nil.name
是一种未定义的方法。)
Rails有一个内置的委托人可以用来回避这个:
class Recipe < ActiveRecord::Base
belongs_to :user
delegate :name, :to => :user, :prefix => :user, :allow_nil => true
end
这将定义名为r.user_name
的配方实例方法,如果用户存在则返回名称,如果不存在则返回nil
。