2012-12-18 59 views
0

不知道爲什麼我可以解決這個問題,但希望得到一些幫助。我正在嘗試使用ransack顯示搜索結果時從我的用戶模型訪問屬性名稱。用has_many和belongs_to關聯訪問用戶屬性

我的食譜控制器是像這樣

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

一般來說,你不想鏈關聯方法一起,因爲它使處理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,如果它不。

+0

嗯,即時通訊有點困惑,因爲當用戶註冊時需要輸入名稱,他們必須填寫....啊,除非我的一位老用戶在註冊時沒有用戶名字段時上傳了配方。如果一個或兩個食譜沒有名字,會導致問題嗎? – Richlewis

+0

解答作品,謝謝 – Richlewis

相關問題