form_for non-AR model - fields_for Array attribute doesn't iterate

后端 未结 3 399
野趣味
野趣味 2020-12-30 09:15

I\'m having trouble getting fields_for to work on an Array attribute of a non-ActiveRecord model.

Distilled down, I have to following:

models/pa

相关标签:
3条回答
  • 2020-12-30 09:42

    I think that it can be done without the need of each:

    = form_for @parent, :url => new_parent_path do |f|
      = f.fields_for :bars do |r|
        = r.object.inspect
    

    You need to set some methods that are expected in the parent class to identify the collection.

    class Parent
      def bars_attributes= attributes
      end
    end
    

    And you also will need to make sure that the objects in the array respond to persisted (so you cannot use strings) :(

    0 讨论(0)
  • 2020-12-30 10:04

    I ditched the fields_for and added multiple: true

    = form_for @parent, :url => new_parent_path do |f|
      - @parent.bars.each_with_index do |bar, i|
        = f.text_field :bars, value: bar, multiple: true, id: "bar#{i}"
    
    0 讨论(0)
  • 2020-12-30 10:06

    I think the correct technique is:

    = form_for @parent, :url => new_parent_path do |f|
      - @parent.bars.each do |bar|
        = f.fields_for "bars[]", bar do |r|
          = r.object.inspect
    

    Quite why it can't be made to Just Work I'm not sure, but this seems to do the trick.

    0 讨论(0)
提交回复
热议问题