У меня есть 3 модели, которые содержат ассоциацию has-many-through.fields_for builder метод .объект не позволяет мне извлекать значения объекта
код модели выглядит следующим образом:
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
использует fields_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 />
1-ые 2 отладочные линии бит, что мой вопрос о том, но это первый относится к третьей строке. Там, я пытаюсь обеспечить выпадающее поле выбора с «предварительно выбранным» значением. Это так, что когда пользователь редактирует RegistryItem, будет отображаться их ранее выбранное имя_признака.
Я пытаюсь использовать f.object.attr_name_id
, чтобы установить это значение, однако на самом деле он не правильно выбрал ранее выбранное значение, а вместо этого просто переходит к 1-му.
1-ые две отладочные строки были тогда я пытаюсь, чтобы убедиться, что мой f.object
метод работал ...
Когда я посмотрел в моих журналах, я вижу следующее:
object type is: #<ItemAttrVal:0x007fb3ba2bd980>
some details are: --
В основном, 1-я строка показывает мне, что я получаю ItemAttrVal . Вторая строка, похоже, не извлекает никакой информации для нее.
Я также использовал отладчик, чтобы проверить, и там, я могу использовать display f.object.attr_name_id
, чтобы показать мне точное значение, что я ожидал ...
Этот вид сводится к двум вопросам ...
- Почему я не могу получить значения
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" %>
) неправильно, и на самом деле есть лучший способ сделать это?
Заранее благодарен!
Я проверил хэши params, и attr_name_id тоже не отображается. Я * угадываю * это потому, что я пытаюсь управлять им как частью его «родительской» формы, а не ее собственной. –
Тем не менее, я благодарю вас за то, что он просматривал ваш ответ, что заставило меня понять, что я поместил опцию ': selected' в неправильную часть метода. >. < –