用逗号分隔text_field,用于嵌套的多态标记表单

时间:2013-01-22 00:30:03

标签: ruby-on-rails nested-attributes polymorphic-associations

我有一个多态的标签模型,它也嵌套在微博下(这样用户就可以用相同的“形式”提交微博和标签)。

到目前为止,表单已成功提交,微博会保存,标签会保存到我的标签表中。

但是,我想要做的是将标签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 %

1 个答案:

答案 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