Ruby on Rails:如何验证是否在特定页面上?

Ben*_*ith 0 ruby validation ruby-on-rails ruby-on-rails-3 ruby-on-rails-4

在我的 Ruby on Rails 应用程序中,我尝试添加验证以确保用户在文本框中输入了一个值。在我的系统中,我有一个名为的表Account,用于存储用户的电子邮件帐户信息,当他们进入views/accounts/_form.html.erb页面添加新的电子邮件帐户时,我想验证是否存在端口号。我可以通过以下代码做到这一点:

validates :port, presence: true
Run Code Online (Sandbox Code Playgroud)

这成功地确保了用户输入了他们的端口号,但是当用户通过views/users/_new.html.erb页面注册时,他们只需要输入一个电子邮件地址(例如 example@example.com),users_controller然后就会在Account表中为这个电子邮件地址创建一个记录。我的问题是在views/accounts/_form.html.erb页面上需要端口号,但在页面上views/users/_new.html.erb不是。

有没有验证用户输入的端口号,如果他们是对的方式views/accounts/_form.html.erb页面或调用create的方法accounts_controller

我知道我可以通过 HTML 所需的验证来做到这一点,如下所示:<%= f.text_field :port, :required => true %>但我需要添加进一步的验证以及存在,所以这不合适。

Ste*_*zyn 6

您可以创建一个attr_accessor字段来确定是否应该进行验证...

class Account < ActiveRecord:Base
  attr_accessor :port_needs_validation
  validates :port, presence: true, if: -> {port_needs_validation} 
Run Code Online (Sandbox Code Playgroud)

然后只需在您的创建方法中设置访问器...

def create
  @account = Account.new
  @account.assign_attributes(account_params)
  @account.port_needs_validation = true
  if @account.save
    ...
Run Code Online (Sandbox Code Playgroud)