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