我正在以邮寄形式工作而不是标签。该关系是has_and_belongs_to_many
和Post
之间的经典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,所以我的第一个例子可以工作,但我肯定在这里遗漏了一些东西。
答案 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