小编ddi*_*ier的帖子

设计和多个"用户"模型

我正在使用rails 3.2和设计2.0,我对Rails很新.

要求

我想实现以下目标:

  • 具有2个或更多"用户"模型,例如.会员,客户,管理员
  • 所有型号共享一些必填字段(例如电子邮件和密码)
  • 每个模型可能有一些独特的领域(例如,仅限客户的公司)
  • 某些字段可能是共享的但没有相同的验证(例如,客户需要名称,但会员可选)
  • 注册过程中必须填写所有字段,因此表单不同
  • 登录表单应该是唯一的

可能的解决方案

我用Google搜索并搜索了StackOverflow很长一段时间,但对我来说似乎没什么问题(我是一个Java人,对不起:)现在我很困惑.出现了两个解决方案:

单一设计用户

这是最常见的答案.只需创建默认设备用户并在会员 - >用户和客户 - >用户之间创建关系.我关注的是如何为每个模型实现自定义注册过程?我尝试了不同的东西,但一切都结束了!

多个设计用户

这解决了自定义注册过程,对我来说似乎是正确的,但唯一的登录表单是一个阻止程序.我在SO(Devise - 从两个模型登录)上找到了答案,建议覆盖Devise :: Models :: Authenticatable.find_for_authentication(条件).这似乎很复杂(?),因为我是铁杆新手,我想知道这是否有效?

谢谢你的建议!

ruby-on-rails devise

73
推荐指数
4
解决办法
5万
查看次数

factory_girl和sprintf

首先,我对Ruby很新,虽然我有很强的Java背景(没有帮助:).我创建了我的第一个Rails应用程序,我正在使用FactoryGirl.我遇到了一些奇怪的东西(对我来说),我无法弄清楚为什么它会像这样.

在工厂中使用sprintf(请参阅上一个测试)会引发以下错误:

Failures:
  1) Test raises an ArgumentError
     Failure/Error: sprintf('Product %05d', n)
     ArgumentError:
       wrong number of arguments (3 for 2)
     # ./spec/models/fg_spec.rb:6:in `fff'
     # ./spec/models/fg_spec.rb:31:in `block (3 levels) in <top (required)>'
     # ./spec/models/fg_spec.rb:62:in `block (2 levels) in <top (required)>'
Run Code Online (Sandbox Code Playgroud)

以下是演示此行为的完整规范:

def fff(n)
    sprintf('WWW Product %05d', n)
end

b1 = proc { |n| fff(n) }
b2 = proc { |n| sprintf('WWW Product %05d', n) }

FactoryGirl.define do

    factory :product1, :class => Product do
        sequence(:name) { |n| 'Product %05d' % "#{n}" } …
Run Code Online (Sandbox Code Playgroud)

ruby factory-bot

4
推荐指数
1
解决办法
299
查看次数

标签 统计

devise ×1

factory-bot ×1

ruby ×1

ruby-on-rails ×1