Ruby on rails 如何在RSpec上表示let helper中的嵌套属性
我不知道如何表达嵌套属性。 文章有许多文章类别。 我会模拟这种参数 [:article][:article[u categories][0][:category[u id]=40001 我用let来表示这个参数。 下面是我的Rspec代码Ruby on rails 如何在RSpec上表示let helper中的嵌套属性,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,我不知道如何表达嵌套属性。 文章有许多文章类别。 我会模拟这种参数 [:article][:article[u categories][0][:category[u id]=40001 我用let来表示这个参数。 下面是我的Rspec代码 let(:article) { { article_categories_attributes:[ category_id: ["40001", "40002"] ] } 但我认为这表达了arti
let(:article) {
{
article_categories_attributes:[
category_id: ["40001", "40002"]
]
}
但我认为这表达了article[:article\u categories\u attributes][:category\u id]。
如何表示[0]?
如果你能解决这个问题,我将不胜感激
[附录]强_参数
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
试试这个:
let(:article) {
{
article_categories_attributes:
{
"0"=>{"category_id"=>"40001"},
"1"=>{"category_id"=>"40002"}
}
}
希望这能有所帮助:如果你真正想做的只是将一篇文章和一个你不需要的类别关联起来,那么就接受嵌套的属性 假设您有以下模型:
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为所有has\u many和has\u以及属于\u多个关联创建\u ID设置器。如果关联是间接的,则Rails也会插入联接模型
不必费心尝试使用accepts\u嵌套的\u属性,因为记录还没有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]
)
你想要达到什么目标?是否要覆盖类别\u id值或读取类别\u id的现有值?什么是:在这种情况下的文章?我觉得您需要在问题中添加更多代码以使其更清晰。谢谢您的评论。我修改了剧本。你能检查一下吗?另外,多行声明使用let with do end。谢谢你的评论。我差点忘了。由于参数太强,它不能正常工作。你能告诉我在这种情况下如何表达嵌套模型吗?我附加了强参数的定义,你是什么意思?两级筑巢?这是一个创建嵌套记录的示例。对不起,可能是这样。当我运行您回答的代码时,调试器显示了article_categories_attributes=>[,],因此,我认为这可能是由强参数定义引起的。在这种情况下,我该怎么办?我决定了。如果您只是希望创建一篇文章,同时为其分配类别,那么您不需要嵌套属性。只需使用类别即可。谢谢,但它不起作用。我错过了我的强参数。我重写了这个问题。你能告诉我怎么做吗?