gpt4 book ai didi

ruby-on-rails - fields_用于发送数组而不是哈希(Rails 3)

转载 作者:行者123 更新时间:2023-12-03 00:53:31 25 4
gpt4 key购买 nike

我在表单中使用 fields_for ,如下所示

<%= form_for @user %>
...
<%= f.fields_for :photos do |f2| %>
<%= f2.radio_button :public, 'true' %>
<% end %>
...
<% end %>

以下是它生成的单选按钮:

<input id="user_photos_attributes_0_public_true" name="user[photos_attributes][0][public]" type="radio" value="true" /> 
<input id="user_photos_attributes_0_id" name="user[photos_attributes][0][id]" type="hidden" value="1" />

<input id="user_photos_attributes_1_public_true" name="user[photos_attributes][1][public]" type="radio" value="true" />
<input id="user_photos_attributes_1_id" name="user[photos_attributes][1][id]" type="hidden" value="4" />

<input id="user_photos_attributes_2_public_true" name="user[photos_attributes][2][public]" type="radio" value="true" />
<input id="user_photos_attributes_2_id" name="user[photos_attributes][2][id]" type="hidden" value="5" />
...

我在 user.rb 中有这个

  has_many :photos
accepts_nested_attributes_for :photos

提交表单时出现此错误:

Error during failsafe response: ActionView::Template::Error
TypeError (expected Hash (got Array) for param `photos_attributes'):

有谁知道为什么会这样吗?

顺便说一句,我正在使用 Rails 3.0.0.rc2

最佳答案

您如何保存模型?

如果您检查 params 哈希,您将得到类似以下内容:

{ :user => {:photo_attributes => [{:id => 1, :public => true}, {:id => 4, :public => false}] }, :your_other_params => ... }}

所以 User.new(params[:user]).save 应该可以工作。除非您传递属性的每个散列而不是数组。请参阅this article如果您需要更深入的详细信息。

您的 params 哈希值中有什么?这将帮助您追踪问题。

顺便说一句,如果您想要“真/假”行为(我假设由于 is_public 属性),而不是“存在/不存在”,则应使用复选框。单选按钮用于互斥的选项。

关于ruby-on-rails - fields_用于发送数组而不是哈希(Rails 3),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3572138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com