Ruby on rails rails 5 form_标记具有原始DB值,在表单中进行新选择后,必须更新两条记录
我有一个表单标签和一个单选按钮标签,它用数据库中的数据填充。它必须直接指向一个定制的更新操作(update\u multiple),在该操作中,一个布尔列将针对表单中已更改的所有2条记录进行更新 例如,当最初从DB填充表单时,选择了记录1的单选按钮,现在用户将其选择更改为记录3,则在提交表单标签时,必须更新两个记录,但问题是提交时的代码,仅收集当前在该组中选中的记录的id。如何获取未选中的记录的id,以便一次更新两个记录的所有id 如果Submit无法处理此操作,那么在控制器或表单中是否有方法在填充表单之前保留初始选定记录的id?如您所见,我已经尝试收集带有单选按钮标记的ID[]数组 谢谢你的帮助 以下是表格代码:Ruby on rails rails 5 form_标记具有原始DB值,在表单中进行新选择后,必须更新两条记录,ruby-on-rails,forms,ruby-on-rails-5,Ruby On Rails,Forms,Ruby On Rails 5,我有一个表单标签和一个单选按钮标签,它用数据库中的数据填充。它必须直接指向一个定制的更新操作(update\u multiple),在该操作中,一个布尔列将针对表单中已更改的所有2条记录进行更新 例如,当最初从DB填充表单时,选择了记录1的单选按钮,现在用户将其选择更改为记录3,则在提交表单标签时,必须更新两个记录,但问题是提交时的代码,仅收集当前在该组中选中的记录的id。如何获取未选中的记录的id,以便一次更新两个记录的所有id 如果Submit无法处理此操作,那么在控制器或表单中是否有方法在
<%= form_tag update_multiple_user_cv_attachments_path, method: :put, action: :update_multiple do %>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th> Select a CV </th>
<th> Resume Name </th>
</tr>
</thead>
<tbody>
<% @cv_attachments.each do |cv_attachment| %>
<%= hidden_field_tag cv_attachment.main, :value => params[:main] %>
<tr>
<td><%= radio_button_tag "cv_attachment_ids[]", cv_attachment.id, cv_attachment.main %> </td>
<td><%= cv_attachment.attachment.file.basename %></td>
</tr>
<% end %>
</tbody>
</table>
<br>
<%= submit_tag "Select Main", :class =>'button' %>
<% end %>
结束我可以想出两种方法来实现你的目标
<tbody>
<% @cv_attachments.each do |cv_attachment| %>
<% if cv_attachment.main %>
<%= hidden_field_tag "ex_main_cv", cv_attachment.id %>
<% end %>
<tr>
<td><%= radio_button_tag "main_cv", cv_attachment.id, cv_attachment.main %> </td>
<td><%= cv_attachment.attachment.file.basename %></td>
</tr>
<% end %>
</tbody>
非常感谢@margo。下面是我如何解决这个问题的一部分,你使用隐藏字段的方式。但现在保持这个线程打开,因为我正在为同一列的切换进行2 DB的更新
<tbody>
<% @cv_attachments.each do |cv_attachment| %>
<% if cv_attachment.main %>
<%= hidden_field_tag "ex_main", cv_attachment.id %>
<% end %>
<tr>
<td><%= radio_button_tag "new_main", cv_attachment.id, cv_attachment.main, :id => "#{cv_attachment.id}"%> </td>
<td><%= cv_attachment.attachment.file.basename %></td>
</tr>
<% end %>
</tbody>
任何一个或几个线性代码,以便与数据库的交互是最小的??切换!也可以用来更新更新的属性。因为它只需要更新2条记录的布尔状态,调用更新属性或切换!每一次,都不是一个非常有效的解决方案。如果要持久化操作,则必须与数据库交互。你有什么建议?如果您的意图不是持久化用户的操作,那么可以使用javascript切换值,并可能触发ui更改。
def update_main_attachment // probably a better name for this method
if params["ex_main_cv"] != params["main_cv"]
Attachment.transaction do
deselected_attachment = Attachment.find(params["ex_main_cv"]
deselected_attachment.update_attribute(:main, false)
selected_attachment = Attachment.find(params["main_cv"]
selected_attachment.update_attribute(:main, true)
end
end
end
<tbody>
<% @cv_attachments.each do |cv_attachment| %>
<% if cv_attachment.main %>
<%= hidden_field_tag "ex_main", cv_attachment.id %>
<% end %>
<tr>
<td><%= radio_button_tag "new_main", cv_attachment.id, cv_attachment.main, :id => "#{cv_attachment.id}"%> </td>
<td><%= cv_attachment.attachment.file.basename %></td>
</tr>
<% end %>
</tbody>
def update_main
if request.put?
if params["ex_main"] != params["new_main"]
CvAttachment.find(params[:ex_main]).toggle!(:main)
CvAttachment.find(params[:new_main]).toggle!(:main)
end
end