0

我有一个多态的标签模型,它也嵌套在微帖子下(以便用户可以在同一个“表单”中提交微帖子和标签)。

至此,表单提交成功,微博保存,标签保存到我的标签表中。

但是,我想要做的是将标签 text_field 中提交的任何内容(它在下面说“工作,工程”)拆分为单独的标签,并用 split(", ")

这是我单击提交按钮时的 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 %
4

1 回答 1

0

首先哈希 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
于 2013-01-22T06:08:38.343 回答