使用has_many和belongs_to关联访问用户属性

时间:2012-12-18 18:35:56

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

不知道为什么我可以解决这个问题但是会感谢一些帮助。我在尝试使用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

我缺少什么,简单的猜测?

谢谢

1 个答案:

答案 0 :(得分:1)

通常,您不希望将关联方法链接在一起,因为这会使处理nil关联变得更加困难(我假设这里发生了什么:r.usernil,并且nil.name是一种未定义的方法。)

Rails有一个内置的委托人可以用来回避这个:

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

这将定义名为r.user_name的配方实例方法,如果用户存在则返回名称,如果不存在则返回nil