【问题标题】:Validation methods outside of validators验证器之外的验证方法
【发布时间】:2016-04-25 23:26:24
【问题描述】:

如果传递给它们的值满足某些要求,我有一些方法会返回 true 或 false。

这些验证将从几个不同的控制器调用,也可能是不同的模型。

我想在不将它们插入对象并在对象上运行验证的情况下执行此操作。这可能吗?

我是否将所有这些“验证方法”归为一个类?如果是这样,那个班级去哪里了”

【问题讨论】:

  • 您似乎反对他们,但这似乎与 Rails custom Validator objects 的用途完全一样。它们将存储在app/validators
  • 为什么不希望使用自定义验证器?

标签: ruby-on-rails validation ruby-on-rails-4 design-patterns


【解决方案1】:

您可以为此使用助手。这将在控制器、模型和视图页面中可用。

示例:

调用查看页面

SampleHelper.just_checker({user_object})

如果要在Controller中使用,请包含它。

include SampleHelper

helpers/sample_helper.rb

module SampleHelper

  class << self
    def just_checker(user)
      check_admin(user)
    end
  end

  def check_admin(user)
    redirect_to root_url unless user.admin
  end

  # lets use it in controller with before_action
  def check_admin_with_current_user
    redirect_to root_url unless current_user.admin
  end
end 

samples_controller.rb

class SamplesController < ApplicationController
include SampleHelper
before_action :check_admin_with_current_user, only: :destroy

  def destroy
     #...
  end
end

【讨论】:

  • 我应该把这个模块保存在哪里?
  • app/helpers/sample_helper.rb
  • 我必须将此目录添加到我的自动加载路径中,还是默认加载?
  • @MatthewCliatt 自动加载路径是什么意思?,只需要它在帮助文件夹中创建新文件。 rails 会自动加载它。
  • 我不认为这个文件夹默认存在。对于很多东西,比如自定义验证器,通常的做法是在 /app/ 中创建一个新文件夹并将该文件夹添加到 application.rb 文件中的自动加载路径中。就像this guide 一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多