Rails 强参数 - 哈希数组 - 单一形式的多条记录
Rails Strong Parameters - Array of Hashes - Multiple Records in Single Form
我正在尝试在 rail 5.2 应用程序中以单个表单提交多条记录。我没有使用接受另一个模型的嵌套属性,因为它似乎总是引入以前创建的条目。条目一旦创建便无法编辑。
<%= form_tag entry_details_path do %>
<% @entries.each do |entry| %>
<%= fields_for 'entries[]', entry do |e| %>
<div class="field">
<%= e.label :user_account_id %><br>
<%= e.text_field :user_account_id %>
</div>
<div class="field">
<%= e.label :amount %><br>
<%= e.text_field :amount %>
</div>
<% end %>
<% end %>
<div class="actions">
<%= submit_tag %>
</div>
<% end %>
参数看起来像:
"entries"=>[<ActionController::Parameters {"user_account_id"=>"3", "amount"=>"55"} permitted: false>, <ActionController::Parameters {"user_account_id"=>"4", "amount"=>"65"} permitted: false>]
我想将整个哈希数组 pash 到一个创建,例如:
def create_multiple_entries
@entries = Entries.create(multiple_entries_params)
@entries.reject! { |e| e.errors.empty? }
if @entries.empty?
redirect_to entries_path
else
render 'new'
end
end
如果手动输入数组,上述方法有效。我的挑战是强大的参数(我认为)。现在我有:
def leave_accrual_details_params
params.require(:entries).permit([:user_account_id, :amount])
end
这给了我以下错误:
!! #<NoMethodError: undefined method `permit' for #<Array:0x00007fee4014ec78>>
为 Rails 5 尝试以下操作:
def leave_accrual_details_params
params.require(:entries).map do |p|
p.permit(:user_account_id, :amount)
end
end
我正在尝试在 rail 5.2 应用程序中以单个表单提交多条记录。我没有使用接受另一个模型的嵌套属性,因为它似乎总是引入以前创建的条目。条目一旦创建便无法编辑。
<%= form_tag entry_details_path do %>
<% @entries.each do |entry| %>
<%= fields_for 'entries[]', entry do |e| %>
<div class="field">
<%= e.label :user_account_id %><br>
<%= e.text_field :user_account_id %>
</div>
<div class="field">
<%= e.label :amount %><br>
<%= e.text_field :amount %>
</div>
<% end %>
<% end %>
<div class="actions">
<%= submit_tag %>
</div>
<% end %>
参数看起来像:
"entries"=>[<ActionController::Parameters {"user_account_id"=>"3", "amount"=>"55"} permitted: false>, <ActionController::Parameters {"user_account_id"=>"4", "amount"=>"65"} permitted: false>]
我想将整个哈希数组 pash 到一个创建,例如:
def create_multiple_entries
@entries = Entries.create(multiple_entries_params)
@entries.reject! { |e| e.errors.empty? }
if @entries.empty?
redirect_to entries_path
else
render 'new'
end
end
如果手动输入数组,上述方法有效。我的挑战是强大的参数(我认为)。现在我有:
def leave_accrual_details_params
params.require(:entries).permit([:user_account_id, :amount])
end
这给了我以下错误:
!! #<NoMethodError: undefined method `permit' for #<Array:0x00007fee4014ec78>>
为 Rails 5 尝试以下操作:
def leave_accrual_details_params
params.require(:entries).map do |p|
p.permit(:user_account_id, :amount)
end
end