Tag: validation

如何使validates_inclusion_of的错误消息显示允许的选项列表?

我有一个validates inclusion:在我的模型中,但我认为“未包含在列表中”的默认错误消息完全没有用。 如何让它在错误消息本身中显示允许的选项列表? (例如, “is not one of the allowed options (option 1, option 2, or option 3)” ? 更具体地说,获得以下测试的最优雅方法是: describe Person do describe ‘validation’ do describe ‘highest_degree’ do # Note: Uses matchers from shoulda gem it { should allow_value(‘High School’). for(:highest_degree) } it { should allow_value(‘Associates’). for(:highest_degree) } it { should allow_value(‘Bachelors’). for(:highest_degree) } […]

Rails:仅当另一个字段存在时才validation字段

我有一个模型,其中有两个字段在技术上可以为null。 字段名称为:is_activated和:activated_at 。 :activated_at仅当:is_activated设置为true时才需要:activated_at 。 如果:is_activated为false ,则不需要存在。 Rails将此validation直接设置为ActiveRecord的适当方法是什么?

Rails:使用与validation中的模型无关的表单字段

在Ruby on Rails应用程序中,我尝试使用来自validation中与模型无关的字段的信息。 这是模型的一部分作为一个例子(整个模型有点大): class Scorecard < ActiveRecord::Base belongs_to :course belongs_to :user validate :attributes_consistency def attributes_consistency # Executed for all scorecards. Checks if the user completed the hole attributes correctly if ( params[:no_fairways] and any_fairways? and !only_nine? ) or ( params[:no_fairways] and !any_h1_to_h9_score_blank and any_h1_to_h9_fairway? and only_nine? ) or ( params[:no_fairways] and !any_h10_to_h18_score_blank and any_h10_to_h18_fairway? […]

Shoulda / RSpec:确保validation消息“xxx”已打开:base

我仍然非常困惑什么是it { should have(1).error_on(:base) }背后的魔法it { should have(1).error_on(:base) }以及什么是特定的Shoulda匹配器。 我想确保:base包含错误消息“xxx”,那么我该怎么做呢? it “should contain error message ‘xxx'” do contact.valid? contact.errors[:base].should include(‘xxx’) end 这是“走的路”,还是更好的? 谢谢。

如何在update_attributes期间以管理员身份跳过validation?

当我尝试将用户编辑为管理员时,我想跳过validation。 模型 class User … attr_accessible :company_id, :first_name, :disabled, as: :admin 调节器 class Admin::UsersController … def update @user = User.find(params[:id]) @user.update_attributes(params[:user], as: :admin) redirect_to edit_admin_user_path(@user), :notice => “User Account Updated” end 所以我尝试将update操作更改为 def update @user = User.find(params[:id]) @user.attributes = params[:user] @user.save(validate: false) redirect_to edit_admin_user_path(@user), :notice => “User Account Updated” end 但后来我没有访问set :disabled和:company_id属性,因为我不知道在哪里设置as: :admin

Rails嵌套with_option:如果用于validation

validate :updatable? # First validation there is with_options :if => Proc.new { |object| object.errors.empty? } do |updatable| updatable.with_options :if => “self.current_step == basic” do |step| validates …. bla-bla bla 因此,在进行任何validation之前,将调用可更新子例程,并使用适当的错误填充errors[:base]数组,这意味着该对象不可更新。 如果在此子例程中发现任何错误,我希望它跳过其余的validation,但上述示例不起作用 – 它执行所有validation。 但是,如果我改变:if => “self.current_step == basic” to :if => “self.errors.empty? && self.current_step == basic”就像魅力一样。 我做错了什么? 示例显示,嵌套with_option应该有效。 有人能帮我吗 ? 提前致谢。

如何在Rails中更改“3个错误禁止此foobar被保存”validation消息?

在我的rails应用程序中,我在我的活动记录对象中使用validation助手,它们非常棒。 当出现问题时,我会在我的网页上看到标准的“3个错误禁止这个foobar被保存”以及个别问题。 有什么办法可以用我自己的方式覆盖这个默认消息吗?

Railsvalidation搜索参数

我有一个非常安静的API,但我正在努力研究如何干净地实现搜索。 我希望能够在两个日期之间搜索所有记录,日期时间最多允许间隔6小时。 在我的控制器方法中,我有以下内容: required_params = [:start_time, :end_time] if check_required_params(required_params, params) and check_max_time_bound(params, 6.hours) … rest of controller code here … end check_required_pa​​rams是一个如下所示的应用程序方法: def check_required_params(required_params, params_sent) required_params.each do |param| unless has_param(param, params_sent) unprocessable_entity return false end end true end check_max_time非常相似。 我知道在控制器中进行validation是违反最佳做法的,但我看不出如何干净地将它添加到模型中。

仅在所有其他validation通过时执行一次validation

我正在构建一个自定义validation,用于检查银行帐号并使用外部API 对代码进行排序 ,以测试它们是否存在(即是一个正确的有效英国银行帐户)。 由于这是一项昂贵的操作,我不想打扰API,除非帐号和排序代码通过Rails内置的validation。 例如,我有这些基本的validation: validates_presence_of :sort_code, :account_number validates_format_of :sort_code, :with => Regexes::SORT_CODE validates_format_of :account_number, :with => Regexes::ACCOUNT_NUMBER 然后我有自定义validation: validate :check_valid_bank_account def check_valid_bank_account # code here is irrelevant, but essentially this hits the API # if it’s a valid UK bank account all is OK, if not we add an error end 我想要确保的是,只有在模型的其余部分有效时才执行自定义validation。 当我能够自己解决这个问题时,没有任何一点支付25p被告知没有提供帐号! 我知道我可以编写一些逻辑来检查这两个属性是否为空并且手动将它们与正则表达式相匹配……但这似乎不是一种非常Rails的方式。

Rails自定义validation – 只有一条记录可以为真

我正在尝试编写一个validation,其中只有一条记录可以为真。 我有一个带有’主动’布尔列的’游戏’模型,任何时候只有一个游戏可以激活,所以如果有人试图在已经有效的游戏中创建新的“游戏”记录,那么他们应该会收到错误。 以下是我目前所拥有但不起作用的内容! validate :active_game def active_game if active == true && Game.find_by(active: true) == true errors[:name] = “a game is already active!” end end