0

基本的に、私は以下を持っており、引用フォームで collection_select を使用して、 company.addresses リレーションから引用モデルの has_one :address フィールドにアドレスを割り当てようとしています。IRB では、quote1.address = company1.addresses.first などにするだけで、quote_id 列がアドレス インスタンスに適切に入力されます。

さて、このデータベースのセットアップはシンプルで、おそらくこれらの関係を実現するためのより良い方法のように見えるかもしれませんが、アドレス指定可能なタイプとフィールドが引用関係に変更されたため、ポリモーフィックアドレスが問題を引き起こし、企業のアドレス関係が失われました。それらを複製する方法がわかりませんでした。しかし、とにかく、以下のデータベース設定を使用して、見積もりフォームで最初の質問を達成する方法を提案する人はいますか?

class Address < ActiveRecord::Base
  belongs_to :company
  has_many :quotes
  attr_accessibles ...
  .....
end

class Company < ActiveRecord::Base
  has_many :addresses
  accepts_nested_attributes_for :addresses
  has_many :quotes
  attr_accessibles ...
  ....
end

class Quote < ActiveRecord::Base
  belongs_to :address
  belongs_to :company
  accepts_nested_attributes_for :address
  ... attr_accessibles ....
  ....
end

引用符とアドレスの間の結合テーブルをお勧めしますか? そして、会社と住所を1対多に保ちますか?

4

1 に答える 1

1

見積もりをアドレスに結合する別のテーブルを作成します。

新しい足場を作成します。

$ rails g scaffold NewTable quote_id:integer address_id:integer

フォームをこのコードに置き換えます。テストはできませんが、かなり正確なはずです。

<%= form_for @new_table do |f| %>
  <%= f.hidden_field(:quote_id, value: @quote.id) %>
  <%= f.collection_select(:new_table, :address_id, Address.all, :id, :name, :prompt => true) %>
<% end %>

必要に応じて、この NewTable の入れ子になった属性を受け入れることができます。

于 2013-01-20T00:52:30.897 に答える