2

我的模型關聯如下:的Rails 3:包括通過聯想從一個的has_many場

#book model 
class Book < ActiveRecord::Base 
has_many :recommendations, :dependent => :destroy 
has_many :similars, :through => :recommendations, :conditions => ['recommendation_type IS NULL'], :order => 'recommendations.created_at DESC' 

#recommendation model 
class Recommendation < ActiveRecord::Base 
belongs_to :book 
belongs_to :similar, :class_name => 'Book', :foreign_key => 'similar_id' 

#Books_controller - injecting the recommendation_id 
@book = Book.find(params[:id]) 
if params[:content_type] 
    @content_type = params[:content_type]; 
else 
    @content_type = "similars" 
end 

case @content_type 

when "similars" 
    # get the similars 
    @book_content = @book.similars 
    @book_content.each do |similar| 
    @rec_id = Recommendation.where(:book_id=>similar.id, :recommendation_type=>'S').select('id').first.id 
    similar << {:rec_id => @rec_id} 
    # ^-- Above line gives NoMethodError (undefined method `<<' for #<Book:0x10de1f40>): 
    end  

when "references" 
    # get the references 
    @book_content = @book.references 
    @book_content.each do |reference| 
    @rec_id = Recommendation.where(:book_id=>reference.id, :recommendation_type=>'R').select('id').first.id 
    reference << {:rec_id => @rec_id} 
    # ^-- Above line gives NoMethodError (undefined method `<<' for #<Book:0x10de1f40>): 
    end 
end 

所以如上所述,一本書有很多同類者通過建議。我的要求是,雖然檢索類似,我也想包括編號的相應記錄在連接表建議
我的問題是:

  • 我怎麼能包括現場* recommendation_id *非常久遠 同類者

  • 如果它不能直接包含,那麼什麼是正確的方式
    分別確定這個字段(如上所示),然後 其注入同類者實例變量,這樣我可以直接使用 它在我看來?

+1

你想在這裏做什麼範圍相似的建議?添加更多的細節,你會得到更好的迴應。 – 2012-01-30 02:14:04

+0

@MatthewLehner,感謝您的評論。我編輯了這篇文章,介紹更多細節。請幫助。 – rgoraya 2012-01-30 03:49:30

+0

難道你不能只用@ similar.recommendation_id嗎? - 如果這不起作用,請發佈您的類似模型和您想要的視圖邏輯。 – 2012-01-31 05:35:05

回答

0

我建議你閱讀關於關聯的Rails指南,特別是關於has_many :through associations

很多你的代碼是沒有意義的 - 例如:

@book_similars = Book.similars 

這意味着你必須在Book模型同類者一類的方法,但你不提它被定義,或它返回什麼。 Rails不能像這樣工作。

+0

我已經修改了這個問題,以澄清Book模型上的類方法。這只是通過控制器中的一個案例陳述完成的。抱歉的混淆。我對has_many的理解:通過協會對於手頭的任務來說相當清楚。然而,我的*原始問題*是找到一個Rails的方式來包含關聯表(推薦)的屬性(Recommendation_ID)以及由has_many:through返回的數據。請注意推薦表的belongs_to,這就是爲什麼.include(如前所述)不起作用 – rgoraya 2012-01-31 20:54:22

相關問題