在我的应用程序中,我有一个用于编辑所有用户的页面,但是我希望这样我只需要单击一个提交按钮来更新用户'详细信息,但目前我只能编辑一个,然后点击“更新用户”#39;按钮可以更改该用户的详细信息。
_form.html.erb
<%= form_tag edit_user_path do |form| %>
<% @users.each do |user| %>
<%= form_for user do |f| %>
<% if @user.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@user.errors.count, "error") %> prohibited this user from being saved:</h2>
<ul>
<% @user.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :username %><br>
<%= f.text_field :username %>
</div>
<div class="field">
<%= f.label :sunday %><br>
<%= f.text_field :sunday %>
</div>
<div class="field">
<%= f.label :monday %><br>
<%= f.text_field :monday %>
</div>
<div class="field">
<%= f.label :tuesday %><br>
<%= f.text_field :tuesday %>
</div>
<div class="field">
<%= f.label :wednesday %><br>
<%= f.text_field :wednesday %>
</div>
<div class="field">
<%= f.label :thursday %><br>
<%= f.text_field :thursday %>
</div>
<div class="field">
<%= f.label :friday %><br>
<%= f.text_field :friday %>
</div>
<div class="field">
<%= f.label :saturday %><br>
<%= f.text_field :saturday %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
<% end %>
<%= submit_tag "Submit" %>
<% end %>
正如您所看到的,代码底部的submit_tag
绝对没有任何内容,但我希望它能够更新所有用户&#39;细节。任何帮助将不胜感激!
答案 0 :(得分:1)
反对:
<%= form_for user do |f| %>
使用:
<%= fields_for "users[]", user do |f| %>
之后,您将获得每个user_id的控制器参数值:
"users"=>{"user_id1"=>{"attr1"=>"value1"}, "user_id2"=>{"attr1"=>"value1"}
另外,为了使更新对象集合成为可能,可以像这样向UsersController
添加一个动作:
def update_collection
# Update users here
end
并更新config/routes.rb
中的路由:
resources :users do
collection do
match 'update_collection', via: [:put, :patch]
end
end
并在主窗体中使用正确的网址:
<%= form_tag update_collection_users_path, method: :put do |form| %>