2012-11-07 76 views
0

我有一個應用程序,允許用戶添加食譜,然後選擇他們喜歡的食譜來查看他們的會員區,我可以選擇一個最喜歡的,我得到user_id,recipe_id並給它一個favourite_id。Rails中的關聯3

我想要做的是輸出實際的食譜到我的看法(作爲最喜歡的),如菜的名字,country_of_origin等我可以做一個實際的食譜,但不喜歡favourite.Do我需要使用has_many_through爲了這?

我的模型看起來像這樣

用戶

has_many :recipes 
has_many :favourites 

配方

belongs_to :user 
has_many :ingredients 
has_many :preperations 
has_many :favourites 

收藏

belongs_to :user 
belongs_to :recipe 

attr_accessible :user_id, :recipe_id 

我控制器

@favourites = current_user.favourites 

我的link_to後

<%= link_to "Add to favorites", {:controller => 'favourites', :action => 'create', :recipe_id => r.id}, {:method => :post } %> 

我可以列出當前用戶的食譜,這是我對這個

@recipes = current_user.recipes if current_user.recipes 

,然後將它們輸出到視圖像這樣

<% @recipes.each do |r| %> 
<tr> 
<td><%= r.dish_name %></td> 
<td><%= r.country_of_origin %></td> 
<td><%= r.difficulty %></td> 
<td><%= r.preperation_time %></td> 
<td><%= ingredient_names(r.ingredients) %></td> 
<td><%= preperation_steps(r.preperations) %></td> 
<td><%= image_tag r.avatar.url(:thumb)%></td> 
<tr> 
位指示

所以,如果我在視圖

<li><%= @favourites %></li> 

我得到這個輸出

<Favourite id: 16, user_id: 8, recipe_id: 21, created_at: "2012-11-07 20:24:39", updated_at: "2012-11-07 20:24:39">] 

,如果我嘗試

<%= @favourites.dish_name %> 

然後我得到的錯誤未定義的方法dish_name

我如何獲得配方模型的PARAMS到在視圖中顯示。我做道歉只是不能解決問題,這應該很容易,我猜?

任何幫助表示讚賞

回答

1

你得到了一個未定義dish_name因爲你最喜歡的模型沒有這樣的屬性。

@favourites = current_user.favourites返回收藏對象數組。

在你看來,你會做這樣的事情

<% @favourites.each do |f| %> 
    <%= f.recipe %> 
<% end %> 

,將顯示所有配方的CURRENT_USER的最愛。你可以縮小它來顯示一個特定的配方或不是。

+0

我明白你在說什麼,有道理,因爲我必須從配方模型中獲得參數,謝謝你清理那個,但是現在我得到了未定義的方法配方......你建議的是視圖是的? – Richlewis

+0

這是正確的。我明白了,它給你一個未定義的方法配方的原因是因爲你從current_user.favourites得到的是一個Favorite的數組。你需要做的是遍歷數組,然後你就可以做你想要的。讓我更新我的回答 –

+0

非常感謝,現在的作品:) – Richlewis

1

最喜歡的只是持有關係。 您可以通過

@favourites.recipe 

訪問配方則這將是一個配方對象,幷包含您的屬性,如dish_name等

+0

我看到你說的話是有道理的,因爲我有獲得從配方模型中的參數,可以感謝你在清除了,但是我現在得到未定義的方法配方...你建議的是視圖是? – Richlewis

1

@favourites是一個數組,是嗎?然後,你必須遍歷@favourites和工作,每個元素單獨像這樣:

<% @favourites.each do |favorite| %> 
    <%= favorite.recipe.dish_name %>  
<% end %>