0

我需要为包含名为“方法”的列的数据库表定义一个工厂。

我试过这样的事情:

FactoryGirl.define do
  factory :notification_baby_offset, class:'NotificationTemplate' do
    ...
    method {{ 'email' => false, 'notification' => true }}
    ...
  end
end

但是,当我尝试构建它时,我收到一条错误消息:

`method': wrong number of arguments (0 for 1) (ArgumentError) 

它似乎将“方法”标识为函数而不是数据库列。我试图通过:methodor来强调这一点"method",但这没有用。

所以,我必须像这样建造这个工厂才能让它工作:

FactoryGirl.create(:notification_baby_offset, method: { 'email' => false, 'notification' => true })

有什么方法可以避免这种黑客攻击并在工厂中正确定义此列?

4

1 回答 1

0

试试这个:

FactoryGirl.define do
  factory :notification_baby_offset, class:'NotificationTemplate' do
    ...
    after(:build) do |notification|
      notification.method = { 'email' => false, 'notification' => true }
    end
    ...
  end
end

甚至(如果您new支持传递属性):

FactoryGirl.define do
  factory :notification_baby_offset, class:'NotificationTemplate' do
    ...
    initialize_with { new(method: { 'email' => false, 'notification' => true }) }
    ...
  end
end
于 2014-10-14T00:09:13.860 回答