ruby-on-rails - 如何检查值是否包含在 ActiveRecord 验证的散列中?

标签 ruby-on-rails ruby ruby-on-rails-3

我有一个 Project 模型,我需要测试 billing_address_type 是否有效。

class Project < ActiveRecord::Base

  validates :billing_address_type, :inclusion  => { :in => %w(h o) }

  def billing_address_types
    options = {"Home" => "h", "Organisation" => "o"}       
    if person.present?
      options.delete("Home") if person.address.blank?
      options.delete("Organisation") if person.organisation.blank?
    end
    options
  end

但是,validates 行是错误的。我需要检查方法 billing_address_types 返回的散列值是否包含在内。

如何只检查哈希值?

感谢您的帮助...

最佳答案

你可以通过 lambda或新的 Proc到将被动态评估的 :in 选项,并使用 valuesbilling_address_types 返回的散列上的方法仅获取散列值:

validates :billing_address_type, :inclusion  => { :in => lambda { |a| a.class.billing_address_types.values } }

参见 documentation了解详情。

关于ruby-on-rails - 如何检查值是否包含在 ActiveRecord 验证的散列中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13325813/

相关文章:

ruby-on-rails - 如何在 .map block 中使用 Rails link_to 帮助程序,以便输出是实际链接,而不是 HTML 的文本表示形式

ruby-on-rails - 如何重新加载安装到 Rails 应用程序中的 sinatra 模块化应用程序?

c++ - c++ using 声明的 ruby​​ 等价物是什么?

ruby-on-rails-3 - Rails ERB——将生成的 HTML 内容获取到我可以在 Controller 中访问的变量

ruby-on-rails - 使用顺序 ("RANDOM()"的 Rails 3 的 Postgresql 错误)

ruby-on-rails - 如何在 rspec 测试中忽略 ApplicationController 中的 rescue_from?

ruby-on-rails - 这段 Ruby 代码中发生了什么?

ruby-on-rails - Capistrano:部署权限问题

ruby - 将文本拆分成句子,但跳过引用的内容

ruby - 如何在终端中创建交互式菜单?