Использование полей из модели ассоциации (HAS_MANY) с формамикой в ​​рельсах

StackOverflow https://stackoverflow.com/questions/2195534

Вопрос

Я искал и много пробовал, но я не могу добиться этого, как я хочу .. Итак, вот моя проблема.

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}" } %>

Если поля не существуют на новом представлении, вы можете просто проверить, если это новый (новый рекорд?) и представьте другой набор полей (если вы обертываете в частичную, может быть довольно чистым подходом).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top