【发布时间】:2017-03-29 23:14:24
【问题描述】:
我正在使用 Rails 4 和 Devise gem,我的用户模型称为 User (app/models/user.rb)。我想要的是在我的用户数据库表中存储两种不同类型的用户,个人帐户和企业帐户。
我的用户模型如下所示:
个人帐户字段验证
validates :first_name, :email, :gender, :date_of_birth, :last_name, presence: true, if: :personal_account?
企业帐户字段验证
validates :company, :zip, :representante, :founders, :founded_date, :address, :city, :country, :state, :sector, presence: true, if: :business_account?
validates_length_of :zip, minimum: 5, too_short: 'please enter at least 5 characters', if: :business_account?
在views/devise/registrations/new 中,我有两个radio_button 可以在个人帐户和企业帐户之间进行选择,我在用户模型中使用它们来过滤和验证字段。
def personal_account?
self.account_type == "Personal Account"
end
def business_account?
self.account_type == "Business Account"
end
我在 Devise 验证的两个帐户之间也有公共字段。常用字段有:
email
password
password_confirmation
我可以毫无问题地创建个人帐户。但是,当我为企业帐户选择 radio_button 时,填写所有字段并尝试提交表单,这将不起作用,在电子邮件和密码字段上给我一个“不能不为空”的验证错误。
views/devise/registrations/new.html.erb 看起来像这样:
<%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %>
<%= f.error_notification %>
<div class="form-inputs">
<%= f.radio_button :account_type, 'Personal Account', checked: 'checked', wrapper_html: { class: 'radioName'}, data: {behavior: "clickable"} %><span class="ratiospace"></span><span>Personal Account<span class="space"></span></span>
<%= f.radio_button :account_type, 'Business Account', wrapper_html: { class: 'radioName'}, data: {behavior: "clickable"} %><span class="ratiospace"></span><span>Business Account</span>
#more code below
我不想为个人帐户和企业帐户设置两种不同的模型,因为我正在使用一个电子商务 gem,它只需要一个模型来代表我的应用中的用户。我也认为我不需要创建角色模型,因为已经在电子商务中实现了 cancan 能力。
任何帮助将不胜感激。非常感谢您。
【问题讨论】:
标签: ruby-on-rails validation devise