我无法弄清楚如何表达嵌套属性。 文章有很多ArticleCategory。 我会模拟这种参数。
[:article][:article _categories]["0"][:category _id] = 40001
我用let来表达这个参数。 Belows是我的Rspec代码。
let(:article) {
{
article_categories_attributes:[
category_id: ["40001", "40002"]
]
}
但我认为这表达了文章[:article_categories_attributes] [:category_id]。 如何表达[“0”]? 如果你能解决这个问题我会很感激。
[appendix] Strong_parameter
def article_params
params.require(:article).permit(:id, :current_version , :publish_version, :file, :status, :user_id , :update_user_id, :publish_at, :publish_until, article_categories_attributes: [:article_id, {:category_id => []}], article_tags_attributes: [:article_id, {:tag_id => []}], article_histories_attributes:[:id, :article_id, :version, :title, :content, :comment], articles_article_series_attributes:[:article_id, :series_id, :num])
end
答案 0 :(得分:1)
如果您真正想要做的只是关联文章和类别,那么您不需要accepts_nested_attributes
。
让我们说你有这些模特:
class Article
has_many :article_categories
has_many :categories, through: :article_categories
end
class Category
has_many :article_categories
has_many :categories, through: :article_categories
end
class ArticleCategory
belongs_to :article
belongs_to :category
end
您可以创建文章并将其与类别1,2和3关联:
Article.create(title: 'Hello World', category_ids: [1,2,3]).
在这种情况下,params散列会读取:
let(:params) do
{
article: {
title: 'Hello World',
category_ids: [1,2,3]
}
}
end
ActiveRecord为所有_ids
和has_many
关联创建has_and_belongs_to_many
个设置者。如果关联是间接的,则Rails处理插入连接模型也是如此。
不要试图用accepts_nested_attributes
来做这件事 - 因为记录还没有ID,所以在创建记录时它不会起作用。
你也疯狂地筑巢了强大的参数。
不要在一行中写下强大的参数。遵循每行72个字符约定,以便您可以实际读取代码。
params.require(:article)
.permit(
:id, :publish_version, :file, :status, :user_id,
:update_user_id, :publish_at, :publish_until,
:categories_ids, :tags_ids,
article_histories_attributes:
[:id, :article_id, :version, :title, :content, :comment]
)
答案 1 :(得分:0)
试试这个:
let(:article) {
{
article_categories_attributes:
{
"0"=>{"category_id"=>"40001"},
"1"=>{"category_id"=>"40002"}
}
}
希望有所帮助:)