Использование полей из модели ассоциации (HAS_MANY) с формамикой в рельсах
-
25-09-2019 - |
Вопрос
Я искал и много пробовал, но я не могу добиться этого, как я хочу .. Итак, вот моя проблема.
class Moving < ActiveRecord::Base
has_many :movingresources, :dependent => :destroy
has_many :resources, :through => :movingresources
end
class Movingresource < ActiveRecord::Base
belongs_to :moving
belongs_to :resource
end
class Resource < ActiveRecord::Base
has_many :movingresources
has_many :movings, :through => :movingresources
end
Movingresources
Содержит дополнительные поля, как quantity
. Отказ Мы работаем над взглядами на «Билл». Благодаря формаху, чтобы упростить все отношения, просто написав
<%= form.input :workers, :as => :check_boxes %>
И я получаю настоящий хороший список флажков. Но то, что я не узнал до сих пор: как я могу использовать дополнительные поля из «ProtugeResource», следующий или под каждым флажком мои желаемые поля из этой модели?
Я видел разные подходы, в основном, вручную зацикливаться через массив объектов и создавая соответствующие формы, используя: для формы. Интернет. Но ни одно из этих решений не было чистые (например, работало для редактирования вида, но не для новых, потому что необходимые объекты не были построены или порождены и генерируют их, вызванные беспокойством).
Я хочу знать ваши решения для этого!
Решение
Хорошо, я пропустил революцию Accepts_nestest_attributes_for, это объясняет, почему это на самом деле не работает.
Это достало мне большой шаг дальше, но я думаю где-то у меня все равно будет некоторые осложнения с моими сложными отношениями ^ _ ^
class Moving < ActiveRecord::Base
has_many :movingworkers, :dependent => :destroy
has_many :workers, :through => :movingworkers
accepts_nested_attributes_for :movingworkers
end
<% form.inputs :for => :movingworkers do |movingworker| %>
<%= movingworker.inputs :worker, :quantity %>
<% end %>
Другие советы
Формастичная: Label_Method Опция может помочь. Например
<%= form.input :movingworkers, :label_method => :worker %>
или
<%= form.input :movingworkers, :label_method => Proc.new { |x| "#{x.worker} #{x.quantity}" } %>
Если поля не существуют на новом представлении, вы можете просто проверить, если это новый (новый рекорд?) и представьте другой набор полей (если вы обертываете в частичную, может быть довольно чистым подходом).