我有一个多态的标签模型,它也嵌套在微博下(这样用户就可以用相同的“形式”提交微博和标签)。
到目前为止,表单已成功提交,微博会保存,标签会保存到我的标签表中。
但是,我想要做的是将标签text_field中提交的内容(下面的“作业,工程”)分成单独的标签,并用拆分(“,”)分开
单击提交按钮时,这是POST控制台输出:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"T/GieqxRM7Kxl2jmC7hr3KPixM/jVG4pdMi/ceb1Vq0=", "micropost"=>{"content"=>"This is a post", "tags_attributes"=>{"0"=>{"name"=>"jobs, engineering"}}}, "commit"=>"Post"}
最好的方法是将它写入微博控制器中的“创建”方法(如果是这样,有人能指出我正确的方向)吗?
(注意:我看到有一个相关的问题,但我认为他们正在使用HAML所以我没有遵循它)
另外,我不确定为什么0
显示为哈希键。我想这可能是因为我把它放在我的form_for(@micropost)
中,但是如果我不把它放在那里我的标签text_field就会消失。
% @micropost.tags.build %
答案 0 :(得分:0)
首先,hash tags_attributes以0作为哈希键开始,因为它是嵌套资源。如果您同时提交了多个嵌套模型,则会看到
"tags_attributes" => { "0" => {...}, "1" => {...} }
这会将每个嵌套记录的数据保存在一起,并将遍历哈希以创建与提交的记录一样多的记录。
其次,我会使用before_filter来解决问题,这将采用提交的参数哈希并以您正在寻找的格式返回新哈希。如下所示:
before_filter :new_params, only: [:create, :update]
private
def new_params
params["tags_attributes"].each do |key, value|
value["name"] = value["name"].split(", ") }
end
params
end