我无法使用工厂女孩创建有效的评论工厂。我的评论模型属于可评论的并且是多态的。我尝试了很多不同的东西,但目前,我的大部分测试都失败了这个错误:
ActiveRecord::RecordInvalid:
Validation failed: User can't be blank, Outlet can't be blank
我不确定为什么它没有通过验证,特别是因为我的评论模型验证了user_id和outlet_id的存在,而不是用户和插座
这是我的工厂:
factory :comment do
body "This is a comment"
association :outlet_id, factory: :outlet
association :user_id, factory: :user
#outlet_id factory: :outlet
association :commentable, factory: :outlet
end
class CommentsController < ApplicationController
def new
@comment = Comment.new
end
def create
@outlet = Outlet.find(params[:outlet_id])
@comment = @outlet.comments.build(comment_params)
@comment.user_id = User.find(params[:user_id]).id
if @comment.save
redirect_to(@outlet)
end
end
def edit
@comment = Comment.find(params[:id])
end
def update
@comment = Comment.find(params[:id])
if @comment.update(comment_params)
redirect_to @comment.outlet
end
end
def destroy
@comment = Comment.find(params[:id])
if @comment.destroy
redirect_to @comment.outlet
end
end
private
def comment_params
params.require(:comment).permit(:body, :outlet_id, :user_id)
end
端
class Comment < ApplicationRecord
belongs_to :commentable, polymorphic: true
validates :body, :user_id, :outlet_id, presence: true
validates :body, length: { in: 1..1000 }
end
答案 0 :(得分:0)
是否有使用association :user_id
的特殊原因?
你可能想要更像的东西:
factory :comment do
body "This is a comment"
association :outlet, factory: :outlet
association :user, factory: :user
association :commentable, factory: :outlet
end
其中可以简化为:
factory :comment do
body "This is a comment"
outlet
user
association :commentable, factory: :outlet
end