我正在尝试更新sites表中与current_user关联的多行。我存储在我的数据库中的数据是加密的,因此我必须解密字段并在form_tag中的字段中预先填充数据,以便用户在提交时查看和更新所有条目。使用此代码,我收到一条错误,说“预期Hash(得到阵列)为param`站点”“我不知道如何更改代码以正确格式化params散列以更新current_user的所有行。谢谢!
Update_all表格
<%= form_tag update_all_url method: 'patch' do %>
<% @sites.each do |site| %>
<% @pwhint_de = site.pwhint_sb.decrypt 'password' %> # This is decrypting pwhint
<% @username_de = site.username_sb.decrypt 'password' %> # This is decrypting username
<tr> <%= hidden_field_tag 'sites[]', site.id %>
<td><%= text_field_tag "sites[#{site.id}][company]", site.company %></td>
<td><%= text_field_tag "sites[#{site.id}][username_sb]", @username_de %></td>
<td><%= text_field_tag "sites[#{site.id}][pwhint_sb]", @pwhint_de %></td>
</tr>
<% end %>
<%= button_tag "Save all changes" %>
<% end %>
控制器
def update_all_sites
params[:sites].each do |id, new_attributes|
Site.find(id).update_attributes new_attributes
end
答案 0 :(得分:0)
我认为这样可行:
#view
<%= hidden_field_tag "sites[#{site.id}][id]", site.id %>
^^^^^^^^^^ ^^
#Add this in your view
#controller
def update_all_sites
params[:sites].each do |attributes|
Site.find(attributes.delete(:id)).update_attributes new_attributes
end
#etc.
Hashes上的.delete(:key)
方法将删除(NO WAY!?)相应的Key / Value对并返回值,例如在IRB控制台中:
1.9.3p448 > a = {b: 12, c: "bonjour"}
# => {:b=>12, :c=>"bonjour"}
1.9.3p448 > a.delete :c
# => "bonjour"