【问题标题】:Factory_Girl & CanCan: Avoiding uniqueness errorsFactory_Girl & CanCan:避免唯一性错误
【发布时间】:2011-10-17 21:26:16
【问题描述】:

我有一个带有 CanCan“角色”模型的 rails 应用程序。角色有一个“名称”字段,可以调用以确定用户的权限级别。

在 Factory Girl 中,我有很多与“角色”领域相关的模型;一些深度迭代。例如:('account'工厂与'purchase'工厂有关联,与'user'工厂有关联,与'role'有关联)

问题是,如果我调用两个最终与“角色”相关联的工厂,则调用的第二个工厂将无法通过该角色-->“名称”字段的唯一性验证。通常唯一性验证不是问题 - 我只是将有问题的属性设置为一个序列......但我不能在这里这样做 - 为了 cancan 功能,角色的名称必须是特定的。

那么...我该如何解决这个问题?

【问题讨论】:

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


    【解决方案1】:

    您可以预先创建所有角色,然后在测试中根据需要查找它们吗?

    如果没有,您能否在该特定测试中创建您需要的角色,然后将其传递给工厂?

    admin_role = Factory.create(:role, :role_name => "administrator")
    Factory.create(:user, :login => "joe",  :role => admin_role)
    Factory.create(:user, :login => "jane", :role => admin_role)
    

    【讨论】:

    • 为回复干杯。可能是的,但是很多工厂都嵌套得很深。因此,例如,如果我想创建一个“注册”工厂,我必须创建一个角色工厂,然后是具有角色集的用户工厂,然后是具有用户集的购买工厂,然后是具有该购买的注册设置。
    • 嗯,如果您有一个角色列表,并且在创建角色时将其.pop 排除在列表之外怎么办?或者,如果您只是在 Factories.rb 中编写一个方法(不是工厂),在必要时(在工厂中)返回相关角色以防止重复,该怎么办?
    • 此处提到的解决方案 (stackoverflow.com/a/7213281/241232) 可能会满足需求。唯一的问题是,在定义需要角色的新工厂时,由开发人员记住使用该方法。
    猜你喜欢
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多