可标记的帖子模型的表格

时间:2013-05-26 05:31:16

标签: ruby-on-rails nested-forms ruby-on-rails-4

我正在以邮寄形式工作而不是标签。该关系是has_and_belongs_to_manyPost之间的经典Tag

问题是我无法使用标记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,所以我的第一个例子可以工作,但我肯定在这里遗漏了一些东西。

2 个答案:

答案 0 :(得分: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提供的更多方法。

答案 1 :(得分:0)

简单易行的解决方案:

# 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