【问题标题】:Multiple Entry of Checkboxes Data into Database Failed将复选框数据多次输入数据库失败
【发布时间】:2015-03-03 08:49:19
【问题描述】:

在用户注册表单中,我无法输入从多个复选框收集的数据并将其插入我的数据库。

我正在使用 PostgreSQL,Rails 版本 - 4.0.1,Ruby - 1.9.3。

这是我的查看代码(new.html.erb)

div class="field col-md-5">
<%= form_for(@user) do |f|%>
<%= render 'shared/error_messages' %>
<div class="container">
  <% flash.each do |key, value| %>
    <div class="alert alert-<%= key %>"><%= value %></div>
  <% end %>
</div>

  <%= f.label :fname,"First Name" %>
  <%= f.text_field :fname,:class=>"form-control" %>
  <%= f.label :email %>
  <%= f.text_field :email,:class=>"form-control" %>

  <%= f.label :expertise,"Kindly select your field of expertise" %>
   <%= f.label :expertise,"Fundraising" %>
  <%= f.check_box(:expertise,:value=>"Fundraising") %>
   <%= f.label :expertise,"Enhancing Sales" %>
  <%= f.check_box(:expertise,:value=>"Enhancing Sales") %>
  <br>
   <%= f.label :expertise,"Marketing" %>
  <%= f.check_box(:expertise,:value=>"Marketing") %>

<%= f.submit "Create my account", class: "btn btn-large btn-primary" %>
    <% end %>
</div>
 <h4>or</h4> 
  <%=button_to "Sign Up with LinkedIn", login_path, :method => :post,class: "btn btn-large btn-primary" %>
</div>

<% end %>

当我使用此代码运行 Web 应用程序时,所有文本字段(例如名字)的数据都会输入到数据库中,但不会存储任何复选框数据。

请告诉我为什么会这样?

我希望我的模型的数据库专业知识列应该由分配给值符号的字符串填充,与每个复选框一起定义,如上所示。

我有一个想法,即制作一个哈希,其中每个字符串都映射到一个 id,然后专业知识列将存储这些由逗号分隔的唯一 id 集。我们将遍历这些数字并找到它们对应的键,并在需要时在页面上打印该键字符串。

例如 - [1 =&gt;"Fund Raising",2 =&gt; "Marketing",...]

但不知道如何为此编写代码,对此行的任何建议将不胜感激。

另外你有更好的策略来解决这个问题,请告诉。

提前致谢

PS - 模型“Mentor”在其数据库表中具有此列的专业知识。不改变这种层次结构的解决方案。

【问题讨论】:

    标签: ruby-on-rails ruby postgresql ruby-on-rails-4 checkbox


    【解决方案1】:

    我可能会建立某种“专业”模型和关联。 这样,每个专家都会有一个对应的 ID,可以在表单中分配给用户。

    User
      has_many: user_expertises
    
    UserExpertise
      belongs_to: user
      belongs_to: expertise
    
    Expertise
      has_many: user_expertises
      has_many: expertises, through: user_expertises
    

    这会导致: UserExpertise(id: integer, user_id: integer, expertise_id: integer)

    您的复选框可以是:

    <%= f.label "Expertise" %>$                                                                                                           
    <%= f.collection_check_boxes :expertise_ids, Expertise.all, :id, :name do |cb| %>                                                       
      <% cb.label(class: "checkbox inline") {cb.check_box(class:"checkbox") + cb.text} %>                                                 
    <% end %>                                                                                                                           
    

    这篇文章帮助我设置了复选框格式,顺便说一句:Comment Check Boxes

    【讨论】:

    • 其实我的模型是“Mentor”,在这个模型的数据库中有一个叫做Expertise的列,我们不能在不改变这个结构的情况下做点什么吗?
    • 上面的表单作用于 @user 对象...所以我对您注册的内容感到困惑。
    • 基本上,在我的 Web 应用程序中,我拥有三种不同类型的用户,即学生、企业家和导师。我制作了这个表格来填写导师的专业知识。所以我有一个表,其中所有三种用户都被索引,这样我就有一个登录页面和代码可重用性,因为我也想为不同的用户使用相同的表单。希望这能解决问题
    • 你也可以试试看ActiveRecord::Base#store
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    相关资源
    最近更新 更多