Использование полей из ассоциации (has_many) модели с formtastic в рельсах - PullRequest
9 голосов
/ 04 февраля 2010

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

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. Мы работаем над представлениями для «счета». Благодаря formtastic упростить все отношения, просто написав

<%= form.input :workers, :as => :check_boxes %>

и я получаю очень хороший список флажков. Но что я до сих пор не выяснил, так это: как я могу использовать дополнительные поля из «movingresource», рядом или под каждым флажком мои нужные поля из этой модели?

Я видел разные подходы, в основном с ручным циклическим просмотром массива объектов и созданием соответствующих форм, используя: for в части form.inputs или нет. Но ни одно из этих решений не было чистым (например, работало для представления редактирования, но не для нового, потому что требуемые объекты не были построены или сгенерированы, а генерация их привела к беспорядку).

Я хочу знать ваши решения для этого!

Ответы [ 3 ]

8 голосов
/ 07 февраля 2010

Хорошо, я пропустил революцию acceptpts_nested_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 %>
4 голосов
/ 14 мая 2010

Опция Formtastic: label_method может помочь.Например,

<%= form.input :movingworkers, :label_method => :worker %>

или

<%= form.input :movingworkers, :label_method => Proc.new { |x| "#{x.worker} #{x.quantity}" } %>
1 голос
/ 04 февраля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...