2013-04-21 36 views
0

我試圖在用戶訪問/ users /:id時在其顯示頁面中列出用戶想要的廣告。在其顯示頁面上調用用戶對象的特定實例

在我的控制,我有:

def show 
    @user = User.find(params[:id]) 
    @wanted_ads = WantedAd.where(:user_id => params[:id]) 

在我show.html.erb我:

<%= @wanted_ads %> 

Binding.pry說@wanted_ads爲零。在實際頁面上,我得到#<ActiveRecord::Relation:0x007fa3b5a93408>。這似乎是我想要做的一件簡單的事情 - 我錯過了什麼?

+0

您應該使用這個關係。用戶'has_many' wanted_ads。更多信息請點擊http://guides.rubyonrails.org/association_basics。html – AlexBrand 2013-04-22 00:22:49

+0

已經有了這部分。雖然謝謝! – jenno 2013-04-22 00:29:01

回答

0

where返回對象的集合,而不僅僅是一個對象。因此,根據返回的內容,您需要撥打first以獲得應該返回的單個實例,或者撥打each來遍歷所需廣告並將其顯示在您的頁面上。

由於延遲加載結果的基礎查詢機制,因此您在pry中看到ActiveRecord::Relation的實例。 More details can be found here

0

假設你@wanted_ads不是零,你想通過所有的招聘廣告環......

<% @wanted_ads.each do |wanted_ad| %> 

<%= wanted_ad.some_attribute_of_wanted_ad %> 

<% end %> 

我也建議你要知道SQL注入在你的控制器中執行以下代碼。

@wanted_ads = WantedAd.where(:user_id => params[:id]) 

因爲它應該是

@wanted_ads = WantedAd.where(":user_id => ?", params[:id]) 
+0

謝謝!這工作完美。 – jenno 2013-04-22 01:57:21

+0

沒問題。請記住檢查給予您最好幫助的答案,無論是我的還是其他答案之一。 – jason328 2013-04-22 15:17:05

2

where函數返回一個ActiveRecord::Relation。 因此,您可以撥打first以獲取第一個元素last以獲取最後一個或all以獲取存儲在名爲@wanted_ads的數組中的所有元素。

@wanted_ads = WantedAd.where(:user_id => params[:id]).all 

然後,您可以通過該數組並選擇要傳遞給每個元素的視圖的屬性。

只是一個提示:

你應該在你的用戶模型中的ActiveRecord的關係,就像這樣:

has_many :wanted_ads 

而在你WantedAd模型中,像這樣:

belongs_to :user 

而且與此,你有一對一的關係。在你看來

def show 
    @user = User.includes(:wanted_ads).find(params[:id]) 
end 

,然後:

然後,你可以這樣做

<% @user.wanted_ads.each do |wanted_ad| %> 
    <%# do something %> 
<% end %> 
相關問題