Ruby on rails 带merge的Rspec强参数
所以我正试图为我正在进行的项目编写一些测试。 控制器Ruby on rails 带merge的Rspec强参数,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,所以我正试图为我正在进行的项目编写一些测试。 控制器 def update @project = Project.find_by(id: params[:id]) current_tags = @project.project_tags current_tags.destroy_all @project.assign_attributes(project_params) tags = params[:tags].split(',') if @p
def update
@project = Project.find_by(id: params[:id])
current_tags = @project.project_tags
current_tags.destroy_all
@project.assign_attributes(project_params)
tags = params[:tags].split(',')
if @project.save
tags.each do |tag|
valid_tag = Tag.find_by(name: tag.strip.capitalize)
if valid_tag
@project.tags << valid_tag
else
flash[:notice] = "That tag does not exist"
end
end
redirect_to @project, notice: "Project updated successfully"
else
flash.now[:errors] = @project.errors.full_messages
render :edit
end
end
我的项目工厂和工厂女孩
FactoryGirl.define do
factory :project do
creator_id 1
title {Faker::Hacker.adjective}
description {Faker::Hacker.say_something_smart}
start_date {Faker::Date.between(2.days.ago, Date.today)}
end_date {Faker::Date.forward(20)}
status 'planning'
skills_desired 'be smart'
factory :invalid_project do
title nil
end
end
end
最后是我得到的错误
1) ProjectsController PATCH #update while not logged in redirects user back to the root path
Failure/Error: let(:project) {FactoryGirl.create(:project)}
ActiveRecord::RecordInvalid:
Validation failed: Creator can't be blank
因此,我假设问题是,在我的强参数中的控制器中,我正在将创建者id合并到项目中。我不确定要进行测试,正确的语法应该是什么。我在网上搜索了一段时间,什么也找不到。我想在这件事上帮点忙。谢谢我相信当前的错误会让您满意
ActiveRecord::RecordInvalid:
Validation failed: Creator can't be blank
是因为你有这条线
validates :creator, presence: true
因此,如果未分配有效的创建者记录id,则无法创建项目工厂,并且创建者记录必须首先存在。我建议你为创造者工厂做类似的事情。通过这种方式,您可以确保存在一个具有有效id的创建者记录,以便在项目记录的Creator\u id属性中使用
FactoryGirl.define do
factory :creator do
some_attribute "some attribute"
after(:create) do |creator, evaluator|
creator.projects << FactoryGirl.create(:project, creator_id: creator.id)
end
end
end
FactoryGirl.define do
工厂:创造者做什么
某些属性“某些属性”
之后(:create)do |创建者、评估者|
creator.projects因此,经过一些实验和朋友的一点帮助,我能够通过在项目工厂中执行以下操作来添加协作者id:
FactoryGirl.define do
factory :project do
association :creator, factory: :user
title {Faker::Hacker.adjective}
description {Faker::Hacker.say_something_smart}
start_date {Faker::Date.between(2.days.ago, Date.today)}
end_date {Faker::Date.forward(20)}
status 'planning'
skills_desired 'be smart'
factory :invalid_project do
title nil
end
end
end
我添加的字段是关联
association :creator, factory: :user
这允许我使用我在工厂模型中建立的关联。谢谢你抽出时间来帮我@米列斯瓦:你的解决方案也很有效,但我设法想出的那个方案帮助我把它保留到了一家工厂。再次感谢您应该在项目参数
上添加项目id
,您不需要合并任何内容,因为项目
已经属于创建者
FactoryGirl.define do
factory :project do
association :creator, factory: :user
title {Faker::Hacker.adjective}
description {Faker::Hacker.say_something_smart}
start_date {Faker::Date.between(2.days.ago, Date.today)}
end_date {Faker::Date.forward(20)}
status 'planning'
skills_desired 'be smart'
factory :invalid_project do
title nil
end
end
end
association :creator, factory: :user