FactoryGirl多态关联

时间:2017-03-09 18:25:11

标签: ruby-on-rails ruby tdd factory-bot

我无法使用工厂女孩创建有效的评论工厂。我的评论模型属于可评论的并且是多态的。我尝试了很多不同的东西,但目前,我的大部分测试都失败了这个错误:

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

1 个答案:

答案 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