我一直看到围绕这个问题跳舞的话题,所以也许我实际上已经看到了答案,而且我只是在敲打它太久以至于我的大脑无法识别它
简而言之,我认为我需要将表单数据标记为脏,以便它将更新Freelancer对象中的数组字段,但我似乎遗漏了一些东西。
重要信息:programmingLanguages
下面是一个数组字段。在我的迁移中,我有:
t.text :programmingLanguages, array: true, default: []
因此,虽然我目前只向该阵列提交一个字符串,但我希望最终能够提交多个字符串(并在我需要下线时对数据执行操作...)
我有一张表格:
<%= form_for(@freelancer) do |f| %>
<%= f.label :programmingLanguages, "Programming languages (seperated by commas): "%>
<%= f.text_field :programmingLanguages %>
.
.
.
<%= f.submit "Submit", class: "button"%>
<% end %>
哪个提交正常,并给我一个我期望的参数列表:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"long token", "freelancer"=>{"programmingLanguages"=>"Stuff for an array, more stuff for an array"...}
然后我使用这些参数来更新@freelancer
对象的属性:
def create
@freelancer = Freelancer.find(session[:user_id])
if @freelancer.update_attributes(freelancer_params)
redirect_to @freelancer
else
render root_path
end
end
因为我使用多步骤表单(因此按会话查找),所以我更新了创建操作中的属性而不是保存它们,因为我已经使用过的对象已经使用了存在并保存到数据库中。问题是,当我使用update_attributes
时,我注意到SQL提交忽略了我的数组字段,例如上面的programmingLanguages,但是没有忽略params中的其他属性。换句话说,我的整数字段totalPrograms可以轻松/正确地更新,但我的4个数组字段在params之间丢失并更新@freelancer对象。
非常感谢任何帮助!
更新
以下是强烈的参数:
def freelancer_params
params.require(:freelancer).permit(:programmingLanguages, :totalPrograms...)
end
还有一个注意事项,我想:我已经尝试在此处指出:programmingLanguages
是一个数组(la :programmingLanguages => []
或programmingLanguages: []
)并且我得到语法错误( syntax error, unexpected ',', expecting =>
)。这当然可能只是意味着我的语法在我的强力参数中将这些数据设置为数组时,但如果是这样的话那么我就无法在那里找到愚蠢的小错误。