0

我正在以一种不能有标签的形式发布。和has_and_belongs_to_many之间的关系是经典的。PostTag

问题是我无法使用标签 ID 数组初始化帖子,如下所示:

Post.new(tags: [1, 2, 3, 4]) # won't wotk. ActiveRecord expects Tag instances

所以我现在的表格是这样的:

= form_for @post do |f|
    = f.text_field :title, placeholder: 'title...'
    = f.text_area :body
    = fields_for :'post[tags]' do |ft| # hacky. using @post.tags raised 'undefined `model name` for `@post.tags`'
      - Post.tags.each do |tag| # I defined Post::tags since I can't Acces Tag class here
          = ft.check_box tag.id
          = tag.name
  = f.submit 'Save'

这种形式迫使我在任一控制器中进行一些修改,但似乎是一种不好的做法。我还认为我可以覆盖 ActiveRecord::Base 初始化器以允许 id,所以我的第一个示例有效,但我肯定在这里遗漏了一些东西。

4

2 回答 2

0

尝试将 tags_singular_ids 设置为您的 ID。您可以查看http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_and_belongs_to_many了解 has_and_belongs_to_many 提供的更多方法。

于 2013-05-26T06:38:14.210 回答
0

简单而有点hacky的解决方案:

# defined in my posts controller
def post_params
  p =  params.require(:post).merge(user: current_user)
  p[:tags] = p[:tags].map do |id, value|
    value == '1' ? Tag.find(id) : nil
  end.compact!
  p
end
于 2013-05-26T23:37:30.263 回答