首页 > 解决方案 > 如何将其保存到数据库中?

问题描述

我正在制作一个表单,其中包含值为真或假的复选框。

<%= form_tag url_for(action: 'create'), method: "post" do %>
<tbody>
  <tr>
  <td class="image"> <%= image_tag("https://cdn.iris.nitk.ac.in/images/new_dashboard/button_Human.png", class: 'list_image') %></td>
  <td>Profile</td>
  <td><%= check_box_tag '1', true, true, :checked => true, data: {toggle: "toggle", on: "Yes", off: "No", onstyle: "success", offstyle: "danger"} %></td>
  </tr>
  <tr>
  <td class="image"> <%= image_tag("https://cdn.iris.nitk.ac.in/images/new_dashboard/withdraw.png", class: 'list_image') %></td>
  <td>Withdraw Admission</td>
  <td><%= check_box_tag '2', true, true, :checked => true, data: {toggle: "toggle", on: "Yes", off: "No", onstyle: "success", offstyle: "danger"} %></td>
  </tr>
  <tr>
  <td class="image"> <%= image_tag("https://cdn.iris.nitk.ac.in/images/new_dashboard/button_academics.png", class: 'list_image') %></td>
  <td>Course Registration</td>
  <td><%= check_box_tag '3', true, true, :checked => true, data: {toggle: "toggle", on: "Yes", off: "No", onstyle: "success", offstyle: "danger"} %></td>
  </tr>
</tbody>
“btn btn-primary btn-lg btn-block %>

提交后,我将在控制器中执行此创建操作。

def create
1.upto(13) do |i|
  (params[:i] ? (current_user.misc_data[:pin_modules] ||= []) << i : next)
end
redirect_to '/'

结束结束

其中 pin_modules 是我想在用户模型的 misc_data 哈希中创建的数组。提交时我没有收到任何错误,但是当我检查 db 时没有数组并且没有保存任何内容。谁能帮帮我?

标签: ruby-on-railsdatabaseruby-on-rails-4ruby-on-rails-5

解决方案


您正在更新对象属性,但正如您所说,没有将它们保存到数据库中。尝试:

def create
  current_user.misc_data[:pun_modules] ||= []

  (1..13).each do |i|
    next unless params[:i]
    current_user.misc_data[:pin_modules] << i
  end

  current_user.save
  redirect_to '/'
end

或者,如果您想保留三元组,只需current_user.save在重定向之前添加一个


推荐阅读