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 editで情報を取得すると、次のようになります。

@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コントローラーとビューのインデックスを作成して確認しようとしましたが、何も表示されません。空のようです。私が本を作った方法は次のとおりでした

BookController

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 に答える