如何在表单中设置多个值? Rails app

时间:2017-05-24 12:44:17

标签: ruby-on-rails ruby

第一次在stackoverflow上发布smth,所以跳得足够清楚:)。

我已经构建了一个应用程序,您需要使用您的专业地址电子邮件进行注册,并且由于您的电子邮件域名,您将被重定向到您公司的组中。例如:如果我的电子邮件是example@companyone.com,我将被重定向到名为companyone的组。 现在,我希望允许具有不同域名电子邮件地址的人通过在我的管理控制台中的email_domain_name输入中添加第二个值来访问同一个组。我无法弄清楚......

这是我的代码:

管理员组模型:

f.inputs "Details" do
  f.input :name
  f.input :description
  f.input :email_domain_name
  f.input :slug
  f.input :picture, as: :file
end

注册管理员:

def check_group_domain_name
unless Group.find_by(email_domain_name: Mail::Address.new(params[:user][:email]).domain)
  flash[:notice] = t('users.sign_in.invalid')
end
end

模特用户:

def assign_to_group
 self.group = Group.find_by(email_domain_name: Mail::Address.new(self.email).domain)
end

Email_validator:

  class EmailValidator < ActiveModel::EachValidator
  def validate_each(record, attribute, value)
    domain_names = Group.all.pluck(:email_domain_name)
    begin
      m = Mail::Address.new(value)
      r = m.domain!=nil && m.domain.match(Regexp.union(domain_names)) && m.address == value
    rescue Exception => e
      r = false
    end
    record.errors[attribute] << (options[:message] || "is invalid") unless 
r
  end
  end

2 个答案:

答案 0 :(得分:0)

您可以添加alt_email_domain_name字段,并在第一个失败时按其查找该组。用户是否需要拥有该备用域的有效电子邮件?对你正在努力实现的目标感到困惑。

或者,您可以在字段中允许使用逗号分隔的电子邮件域,拆分它们,并检查这两个域组。

答案 1 :(得分:0)

您可以存储逗号分隔的domain_names,并在查询时执行ilike搜索。 如果您希望列表大于您需要将其定义为text而不是string

你可以列出它们,

Group.first.email_domain_name.split(',')

如果您使用post作为db,则另一个推荐的解决方案是使用enter image description here数据类型