在Rails中创建一个3模型关系

时间:2012-07-31 13:28:21

标签: ruby-on-rails ruby ruby-on-rails-3.1

我不确定如何创建一个事件,但仍保持数据集成正确。 这是我的模特

客户

  id
  first
  last
  email

  id
  description

Book_Manager

  customer_id
  book_id
  visible

为了做到这一点,我必须使用has_many关系,他的描述在

之下
Book
has_many :book_managers
    has_many :customers, :through => :book_managers
Book_Manager
    belongs_to :customer
    belongs_to :book
Customer
    has_many :book_managers
    has_many :books, :through => :book_managers

我们的想法是查看之前创建的数据,这意味着我必须创建一个查询,其中Book = Book_Manager表,其中customer_id = current_customer和created_last。我不确定如何在书籍控制器中创建这样的查询。我相信它可能看起来像查询一样。我是对的?当前客户是sessionHelper方法的当前客户

@report = BookManager where customer.id == current_customer.id AND created_last.last

最后但并非最不重要的是,每次客户通过按“保存”修改文本时,都会执行动作创建,并创建一个新的book_manager,其中包含与该图书管理员相关联的正确的第3本模型书籍,以及与该图书管理员相关联的客户。

我有以下代码,但我不确定它是否正确

class BooksController < ApplicationController
    def edit
        @book = Book.find(params[:id])
    end

    def create
        @customer = Customer.first
        @book = @customer.BookManager.build(params[:book])
    end
end

1 个答案:

答案 0 :(得分:3)

Book
  has_many :book_managers
  has_many :books, :through => :book_managers

Book_Manager
  belongs_to :customer
  belongs_to :book

Customer
  has_many :book_managers
  has_many :customers, :through => :book_managers

   Book                Book_Manager          Customer
|-------------|       |-------------|       |---------|
| id          |-1---*-| book_id     |       | id      |
| description |       | customer_id |-*---1-| first   |
|             |       | id          |       | last    |
|             |       |             |       | email   |
|-------------|       |-------------|       |---------|

如果您拥有have_many through,则无需引用联接表(Book_Manager)。您可以直接访问它:

@customer = Customer.first
@books = @customer.books #return all books