1

我正在尝试从与客户相关的书籍中获取信息,但似乎中间关联不起作用

这是我的模型

Book
    has_one :book_manager
    has_one :customer, :through => :book_manager

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

Book_Manager
    belongs_to :customer
    belongs_to :book

该领域有跟随

Book          Customer      book_manager
id            id            id
description   email         customer_id
              password      book_id
              first         visible
              last

在我的 def 编辑中获取信息时,以下是成功的

@book = Book.first
@book = Book.last

以下似乎失败了

@customer = Customer.find(params[:id])
@book = @customer.books.first
@book = @customer.books.order("created_at DESC").first

有什么我想念的吗?

我还尝试通过为 book_manager 控制器和视图创建索引来进行验证,但什么也没有出现,它似乎是空的。我创建书籍的方式如下

图书控制器

def create
@book = current_customer.books.build(params[:book])
    if @book.save
        flash[:success] = "Book Created"
        redirect_to root_url
    else
        render 'customer/edit'
    end
end

我已经更新了我的关系,但仍然无法正常工作

这个想法是遵循

客户更新他的状态,其中包括许多子部分,例如

-Phone
-Book
-Interest

在书下,我应该查看是否存在与客户相关的空书,如果有,则展示最后一本书。如果没有,那么客户会看到空白并可以创建一个新的

图书管理员只是为了维护这种关系,也因为我想保留数据,并且我想让用户确定我们是否将这些数据显示给站点中的其他人。

4

1 回答 1

0

这是我的建议。我在 sqlite3(带有内存数据库)中这样做只是为了演示目的。

连接(在 rails 中,使用 database.yml 代替):

ActiveRecord::Base.establish_connection :adapter => 'sqlite3', :database => ':memory:'

设置类:

class Customer < ActiveRecord::Base
  has_many :book_managers
  has_many :books, :through => :book_managers
end

class BookManager < ActiveRecord::Base
  belongs_to :customer
  has_many :books
end

class Book < ActiveRecord::Base
  belongs_to :book_manager
  def customer
    book_manager.customer
  end
end

创建模式(这里只是为了显示列。在 rails 中,使用迁移):

Book.connection.create_table(Book.table_name) do |t|
  t.string :description
  t.integer :book_manager_id
end
BookManager.connection.create_table(BookManager.table_name) do |t|
   t.boolean :visible
  t.integer :customer_id
end
Customer.connection.create_table(Customer.table_name) do |t|
  t.string :email
  t.string :password
  t.string :first
  t.string :last
end

创建记录

cust = Customer.new :email => 'user@example.com'
cust.book_managers.build :visible => true
cust.book_managers.first.books.build :description => 'the odyssey'
cust.save!

取回

cust = Customer.find 1
# test the has_many :through
cust.books
# test the Book#customer method
Book.first.customer
于 2012-08-01T19:01:11.897 回答