0

我不确定如何始终创建事件,但仍保持数据完整性正确。这是我的模型

顾客

  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 Table where customer_id = current_customer 和 created_last。我不确定如何在图书控制器中创建这样的查询。我相信它可能看起来像查询。我是对的吗?当前客户是 sessionHelper 方法中的当前客户

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

最后但并非最不重要的一点是,每次客户通过按保存修改文本时,都会执行 create 操作,并创建一个新的 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
4

1 回答 1

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
于 2012-07-31T13:41:51.223 回答