我在为模型实现checkbox
逻辑时遇到问题。模型Resume
中有一个名为skills
的字段,它通过checkboxes
接受多个值。模型的复选框实现逻辑
Resume
模型模式是如下:
create_table :resumes do |t|
t.string :name, null: false
t.text :bio
t.string :skills
t.timestamps
end
在视图中,具体到这里复选框我的代码:
<% skills = ["Ruby", "Perl", "Java", "C", "C++"] %>
<div class="form-group">
<% skills.each do |skill| %>
<%= check_box_tag "resume[skills][]", skill %> <%= skill %>
<% end %>
</div>
在控制器:
def resume_params
params[:resume][:skills] = params[:resume][:skills].join(",")
params.require(:resume).permit(:name, :bio, :skills)
end
我得到一个从表单返回的数组skills
。正如我在数据库中声明skills
为字符串类型,我将它们发送到数据库之前加入存储在数组comma
中的检查值。我这样做的原因是因为我不知道data type
为Array
为了直接存储在数据库中的技能。
这是在数据库中存储复选框值的正确方法还是可以以更好的方式实现? 这似乎是不必要的工作来分裂和加入skills
(复选框值)只是为了在数据库中创建/更新。
编辑
用我的方法(非序列化),当我在简历更新bio
场,这是它如何更新
SQL(0.2ms的)UPDATE “恢复” SET “bio”=?,“updated_at”=? WHERE “resumes”。“id”= 20 [[“bio”,“This is my bio”],[“updated_at”,Thu, 2014年2月27日19:27:06 UTC +00:00]]
使用serialize
方法,通过PinnyM的建议,
class Resume < ActiveRecord::Base
....
serialize :skills
end
当我更新简历bio
场,这是它的更新
SQL(0.2ms的)更新如何 “恢复” SET“bio”=?,“u pdated_at“=?, ”技能“=? WHERE“resumes”。“id”= 20 [[“bio”,“这是我的新生物”], [“updated_at”,Thu,2014年2月27日20:18:31 UTC +00:00],[技能”, “--- \正的Java \正ç\正红宝石\ n”](0.6ms)提交事务
注意skills
是越来越重,即使我没有更新的区别对它做任何改变,而我的方法skills
没有更新,因为我没有做任何改变。我想知道为什么在行为上的差异?有没有我可以通过serialize
来阻止这种行为的选项?
我希望,我可以帮你..; p –
@ArupRakshit至少尝试。 Pinny的回答非常好,但我仍然有问题。 –
我在Rails中很弱.. :( –