设计:无法将模型验证限制为特定的def

时间:2014-06-20 15:19:07

标签: ruby-on-rails devise

所以我目前正在处理该网站的注册方面。我有一个主要注册,它只是全名,电子邮件和密码。 (又名new.html.erb)

在您填写该信息后,我会将您引导至新网站(setup.html.erb)并询问更多信息,例如城市,国家/地区等。

在此您还拥有编辑个人资料帐户。

我正在尝试使我的应用程序更安全,并在模型中添加限制和存在等。但是我怎么能限制它们。

目前,如果我这样做 验证:电子邮件,在线状态:真实,
我转到一个甚至不包含电子邮件的表格,也不允许我收到错误,我需要添加电子邮件。

另外我如何解决这个问题:我使存在成立,我在html5中输入require。但是,如果我转到我的源代码并删除表单并按提交保存,我可以绕过添加信息。

1 个答案:

答案 0 :(得分:0)

Currently if I do validates :email, presence: true, and I go to a form that doesn't even contain the email for nor permits it I get an error up that I need to add an email.

<强>修正:

您需要的是conditional validation。如果我们看一下铁路指南,就说

Sometimes it will make sense to validate an object only when a given predicate is satisfied. You can do that by using the :if and :unless options, which can take a symbol, a string, a Proc or an Array.

因此,在您的模型中,您可以执行以下操作:

class Order < ActiveRecord::Base
  validates :email, presence: true, if: :need_to_validate?

  def need_to_validate?
    #your condition to check whether you want email validation or not
  end
end

<强>更新

你可以巧妙地使用 params [:action]和params [:controller] 检查你当前在哪个动作和控制器(因此是哪个视图)所以你的方法是:

def need_to_validate?
  params[:action] == your_view_action && params[:controller] == your_controller_name     #your condition to check whether you want email validation or not
end