2011-01-12 81 views
1
class User < ActiveRecord::Base 
    has_many :books 
    has_many :book_users 
    has_many :books, :through => :book_users 
end 

class Book < ActiveRecord::Base 
    belongs_to :user 
    has_many :book_users 
    has_many :users, :through => :book_users 
end 

的用戶可以寫很多書 一本書只能屬於一個用戶 的用戶可以將不同書籍 讀者的書可以由不同的用戶讀取的Rails 3個聯

User.books 

應該給我的用戶已經寫

User.books_read 

應該給我的書的書,是由該用戶讀取

這是怎麼做到的?

第二個問題,從用戶中刪除book_read最簡單的方法是什麼? 我的意思是

User.method_name(book_id) # what's the method name ? 

回答

1

第一個問題:

你要麼使用:source:class_name

has_many :books_read, :class_name => "Book", :through => :book_users 

我不知道是否:class_name作品與has_many :through。如果它不起作用,請嘗試以下操作:

has_many :books_read, :source => :book, :through => :book_users 

這應該是個訣竅。

第二個問題:

據我知道有沒有真正從books_read關係刪除圖書的簡單方法。你可以創建你自己的方法來完成這個。只要確保你從:book_users刪除記錄而不是has_many :through關係。否則,書籍本身將被刪除。

def delete_book(book_id) 
    self.book_users.find_by_book_id(book_id).destroy 
end 

當使用Rails 3,你不能使用find_by_...助手,並需要使用where

User.find(1).delete_book(2) 

我希望可以幫助你:現在

def delete_book(book_id) 
    self.book_users.where(:book_id => book_id).destroy 
end 

可以如下調用此函數。