我有以下表格
<%= 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
我必须将数组转换为字符串吗?
答案 0 :(得分:2)
您收到错误
TypeError: can't cast Array to string
因为您尝试保存的属性,即softwarename
在数据库中的类型为String
,并且您将其值从表单中传递为Array
(带有复选框)。
您可以使用softwarename
方法标记serialize
属性以进行序列化,以便将softwarename
的值传递的数组转换为String,然后再将其保存在数据库中。如果您从数据库中检索属性,这还会处理从String
到Array
的反序列化。
class Software < ActiveRecord::Base
serialize :softwarename, Array ## Add this line
## ...
end
有关详细信息,请参阅serialize method documentation。