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用户可以写多本书一本书只能属于一个用户用户可以是不同书籍的读者一本书可以由不同用户阅读
User.books 应该给我用户写的书
User.books_read应该给我的书,都是这个用户读的
如何做到这一点?
第二个问题,从用户中删除book_read的最简单方法是什么?我是说
User.method_name(book_id) # what's the method name ?发布于 2011-01-12 20:57:42
第一个问题:
您可以使用: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当使用Rails3时,你不能使用find_by_...助手,而需要使用where。
def delete_book(book_id)
self.book_users.where(:book_id => book_id).destroy
end现在,您可以按如下方式调用此函数:
User.find(1).delete_book(2)我希望这能帮到你。
https://stackoverflow.com/questions/4668327
复制相似问题