Как вы получаете fields_for
для отправки массива?Все, что я нашел в SO, не работает для меня.
Мои параметры отправляются следующим образом:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"mxHD...VoA==", "callsign"=>"baz", "post"=>{"conversation_attributes"=>{"missives_attributes"=>{"content"=>"Hello"}}}}
, но я хочу, чтобы они отправляли таким образом в квадратных скобках.вокруг сообщений:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"mxHD...VoA==", "callsign"=>"baz", "post"=>{"conversation"=>{"missives"=>[{"content"=>"Hello"}]}}}
Я просто хочу отправить один экземпляр missive
, но в виде массива.Другими словами, массив с одним членом.
В этом ответе перечислены все возможные способы заставить это работать, и у меня не получилось с каждым из них:
FAIL 1
_post_form.html.erb
<%= f.fields_for :conversation do |ff| %>
<%= ff.fields_for 'missives[]', [] do |fff| %>
<%= fff.text_area :content %>
...
<% end %>
<% end %>
Результат: Ошибка: неопределенный идентификатор метода для []: Array
FAIL 2
Это отношение ActiveRecord, поэтому, очевидно, мне не нужны методы получения / установки.
<%= f.fields_for :conversation do |ff| %>
<% @missives = [] %>
<%= ff.fields_for :missives, @missives do |fff| %>
<%= fff.text_area :content %>
...
<% end %>
<% end %>
Результат: ошибка (неопределенный метод `content 'для []: Array)
FAIL 3
<%= f.fields_for :conversation do |ff| %>
<%= ff.fields_for :missives, @missives do |fff| %>
<%= fff.text_area :content %>
...
<% end %>
<% end %>
Результат: делаетне ставить квадратные скобки вокруг ракет.
FAIL 4
В контроллере:
@missives = [Postmissive.new]
В форме сообщения:
<%= f.fields_for :conversation do |ff| %>
<%= ff.fields_for :missives, @missives do |fff| %>
<%= fff.text_area :content %>
...
<% end %>
<% end %>
Результат: Ошибка (неопределенный метод `content 'для массива).
Текущее состояние кода:
post.rb
has_one :conversation, class_name: 'Postconversation', dependent: :destroy
accepts_nested_attributes_for :conversation
postconversation.rb
has_many :missives, class_name: 'Postmissive', dependent: :destroy
accepts_nested_attributes_for :missives
postmissive.rb
belongs_to :conversation, class_name: 'Postconversation', foreign_key: 'conversation_id'
validates :content, presence: true
posts_controller.rb
@post = @character.posts.create(post_params)
...
def post_params
params.require(:post).permit( conversation_attributes: [ missives_attributes: [ :content ] ] )
end
_post_form.html.erb
<%= f.fields_for :conversation do |ff| %>
<%= ff.fields_for :missives do |fff| %>
<%= fff.text_area :content %>
...
<% end %>
<% end %>