has-many-through 関連付けを構成する 3 つのモデルがあります。
モデル コードは次のとおりです。
ItemAttrVal
モデル(遷移表)
class ItemAttrVal < ActiveRecord::Base
belongs_to :attr_name
belongs_to :registry_item
end
RegistryItem
モデル
class RegistryItem < ActiveRecord::Base
has_many :item_attr_vals
has_many :attr_names, :through => :item_attr_vals
accepts_nested_attributes_for :item_attr_vals, :allow_destroy => :true
end
AttrName
モデル
class AttrName < ActiveRecord::Base
has_many :item_attr_vals
has_many :registry_items, :through => :item_attr_vals
end
RegistryItem
は afields_for
を次のように使用します。
<%= item.fields_for :item_attr_vals do |iav| %>
<%= render 'item_attr_val_fields', :f => iav %>
<% end %>
部分的には、次のようになります。
<% logger.debug "object type is: #{f.object}"%>
<% logger.debug "some details are: #{f.object.attr_name_id}--"%>
<%= f.select :attr_name_id, options_from_collection_for_select(AttrName.all,"id","description"), :selected => f.object.attr_name_id, :prompt => "Select an attribute" %>
<%= f.text_field :raw_value %> <br />
最初の 2 つのデバッグ行は私の質問のビットですが、最初に 3 行目に関連しています。そこで、ドロップダウン選択フィールドに「事前に選択された」値を提供しようとしています。これは、ユーザーが RegistryItem を編集しているときに、以前に選択した AttrName が表示されるようにするためです。
を使用してその値を設定しようとしてf.object.attr_name_id
いますが、実際には以前に選択した値を適切に選択せず、代わりに最初に移動します。
最初の 2 つのデバッグ行は、メソッドが機能することを確認するためのものでしたf.object
...
ログを見ると、次のように表示されます。
object type is: #<ItemAttrVal:0x007fb3ba2bd980>
some details are: --
基本的に、1 行目は、ItemAttrVal を取得していることを示しています。2 行目は、その情報を取得していないようです。
また、デバッガーを使用してチェックしましたが、そこで、display f.object.attr_name_id
期待している正確な値を表示するために使用できます...
この種の質問は2つにまとめられます...
- の値を取得できないのはなぜ
f.object
ですか? - 行 3 ( ) を間違って実行しようとし
<%= f.select :attr_name_id, options_from_collection_for_select(AttrName.all,"id","description"), :selected => f.object.attr_name_id, :prompt => "Select an attribute" %>
ているのですか?実際にはもっと良い方法がありますか?
前もって感謝します!