【问题标题】:Insert in DB array checkbox rails插入数据库阵列复选框导轨
【发布时间】:2017-05-08 07:52:18
【问题描述】:

使用复选框在数据库中插入数组需要帮助。

  <% @companies.each do |company| %>
  <%= check_box_tag 'company_name[]', company.company_name %> <%= company.id %>
  <% end %>

如何在创建方法中插入这个

  def create
       @ebookAssignedCompanies = EbookCompanyAssigned.create(ebook_company_assigned_param)
       @ebookAssignedCompanies.save
  end

   private

  def ebook_company_assigned_param    
   params.permit(company_name:[]) 
  end

mysql表中的结果是

 +-------------+------------+
 | id |  company_name       |
 +-------------+------------+
 |  1 | ["MHT, "PMT"]       |
 +-------------+------------+

任何想要的结果

  +-------------+------------+
  | id |  company_name       |
  +-------------+------------+
  |  1 | MHT                 |
  |  2 | PMT                 |
  +-------------+------------+

请在这方面需要帮助,谢谢

【问题讨论】:

  • 您可以使用params['company_name']上的循环来完成此操作

标签: ruby-on-rails ruby ruby-on-rails-4 rails-activerecord


【解决方案1】:
def create
  @ebookCompanyAssigneds = []
  @errors = []
  params['company_name'].each do |cName|
    eBookC = EbookCompanyAssigned.new(:company_name => cName)
    if eBookC.valid?
      @ebookCompanyAssigneds << eBookC.save
    else
      @errors += eBookC.errors
    end
  end
end

【讨论】:

  • @coolshox,它会告诉你创建新公司时的错误。我想这是更好的方法。 :)
【解决方案2】:

试试下面的代码:

def create
  params["company_name"].each do |obj|
       @ebookAssignedCompanies = EbookCompanyAssigned.new(company_name: obj)
       @ebookAssignedCompanies.save
  end
end

【讨论】:

  • 嗨@punnet18 它显示错误未定义的局部变量或方法`company_name'
  • @coolshox 接受并投票我的答案,如果它适合你。谢谢
【解决方案3】:

当你写作时

params.permit(company_name:[]) 

返回一个哈希

{company_name: <Array of passing values>}

这就是为什么您只在 company_name 属性中创建一个包含名称数组的记录。

如果您需要在传递的“公司名称”参数中创建与元素一样多的记录,您应该编写:

def create
  params.permit(company_name: [])[:company_name].each do |name|
    EbookCompanyAssigned.create(company_name: name)
  end
end

或:

def create
  array_of_hashes = params.permit(company_name: [])[:company_name]
    .inject([]) { |array, name| array << {company_name: name} }
  EbookCompanyAssigned.create(array_of_hashes)
end

【讨论】:

  • @DjezzL 感谢您的完整解释。我会注意这一点。
猜你喜欢
  • 1970-01-01
  • 2019-05-22
  • 1970-01-01
  • 2010-09-19
  • 2016-11-22
相关资源
最近更新 更多