0

我正在尝试更新与 current_user 关联的站点表中的多行。我的数据库中存储了加密的数据,因此我必须解密字段并在 form_tag 中的字段中预先填充数据,以便用户在提交时查看和更新​​所有条目。使用此代码,我收到一条错误消息,提示“param 'sites' 的预期哈希(获取数组)”我不确定如何更改代码以正确格式化 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
4

1 回答 1

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.

.delete(:key)Hashes 上的方法将删除(NO WAY!?)相应的键/值对并返回值,例如在 IRB 控制台中:

1.9.3p448 > a = {b: 12, c: "bonjour"}
# => {:b=>12, :c=>"bonjour"} 
1.9.3p448 > a.delete :c
# => "bonjour" 
于 2013-08-20T21:16:46.463 回答