Rails保存复选框中的数据

时间:2014-05-19 13:59:24

标签: ruby-on-rails checkbox simple-form

我有以下表格

 <%= simple_form_for(@software)  do |f| %>
 <%= f.input :softwarename, :collection => software_options, as: :check_boxes %>

这个助手。

module SoftwareHelper

def software_options
    ['7zip','SysInternals','Office','PDF-Creator']
end
end

我的应用程序控制器看起来像这样

def software_params
    params.require(:software).permit(:softwarename => [])
end

这是我的软件控制器:

def new
    @software = Software.new
end

def create
    @software = Software.new(software_params)

    @software.save
    redirect_to @software
end

当我尝试将表单输入保存到我的数据库(sqllite)时,我收到以下错误:

TypeError: can't cast Array to string

我必须将数组转换为字符串吗?

1 个答案:

答案 0 :(得分:2)

您收到错误

TypeError: can't cast Array to string

因为您尝试保存的属性,即softwarename在数据库中的类型为String,并且您将其值从表单中传递为Array(带有复选框)。

您可以使用softwarename方法标记serialize属性以进行序列化,以便将softwarename的值传递的数组转换为String,然后再将其保存在数据库中。如果您从数据库中检索属性,这还会处理从StringArray的反序列化。

class Software < ActiveRecord::Base
  serialize :softwarename, Array  ## Add this line
  ## ...
end

有关详细信息,请参阅serialize method documentation