嵌套表格为多对多

时间:2013-06-15 02:44:53

标签: ruby-on-rails

我有一个模型Post,它与另一个模型有许多关系,Tag:

class Post < ActiveRecord::Base
  attr_accessible :body, :section_id, :solved, :subject, :tag_ids, :user_id
  belongs_to :user
  belongs_to :section
  has_and_belongs_to_many :tags
  has_many :comments

这是标签:

class Tag < ActiveRecord::Base
  attr_accessible :subject, :post_ids
  has_and_belongs_to_many :posts

  validates(:subject, presence: true, :length => { minimum: 3, maximum: 15})
end

当我创建帖子时,我需要允许用户在创建时以与帖子的标题和正文相同的形式向帖子添加标签。标签是预先创建的,永远不会在帖子中创建。我不知道该怎么做。我想使用form_for所以我可以轻松填充Post的字段,但我不知道如何将Tags合并到此并将其发送到控制器。有什么建议?这是我的控制器发送到视图的内容:

@post = Post.new
@tags = Tag.all

1 个答案:

答案 0 :(得分:0)

您需要一个字段供用户在表单中输入标签,例如

<input type="text" id="tags" name="tags" />

当请求发布到控制器时,解析标签文本

tags = params["tags"].split(/\s+/) //assuming tags are separated by spaces
tags.each do |t|
  tag = Tag.find_or_create_by_name(t)
  your_post_object.tags << tag
end

最后,不要忘记在save

上致电your_post_object