Tag: validation

更智能的回形针validation

我在rails应用程序中使用paperclip,并在我的模型中进行以下三次validation validates_attachment_presence :photo validates_attachment_size :photo, :less_than=>1.megabyte validates_attachment_content_type :photo, :content_type=>[‘image/jpeg’, ‘image/png’, ‘image/gif’] 如果用户忘记添加附件,则所有三个validation都会失败,因此会向用户显示以下三个错误: # Photo file name must be set. # Photo file size file size must be between 0 and 1048576 bytes. # Photo content type is not included in the list 我认为最好只显示此实例中的第一个错误,因为其他两个错误纯粹是后果…我希望用户只有在添加附件但不符合时才会看到后两个错误validation标准。 我确定没有预先出现的validation可以做这种事情,并且通过阅读vendor / plugins / paperclip / lib / paperclip.rb中的代码,我看到validates_attachment_size方法支持:unless参数如下所示: def validates_attachment_presence name, […]

Rails嵌套属性关联validation失败

我有一个Rails模型的嵌套属性,并且关联validation由于某种原因失败。 我没有使用accepts_nested_attributes_for,但我正在做一些非常相似的事情。 class Project “name”, :value=>val) end end end class ProjectAttribute :project_id validates_presence_of :project_id, :unless => lambda {|attribute| attribute.project.try(:valid?)} validates_associated :project end 这是一个人为的例子,但与我试图做的类似。 我已经看了一下accepts_nested_attributes_for做了什么,它使用了构建方法,我认为它会将构建的属性与项目相关联。 我还查看了accepts_nested_attributes_for子关联validation失败 ,它给了我validates_presence_of :unless=>valid? 有关如何使其工作的任何想法?

ruby on rails多参数属性*如何*工作(datetime_select)

我相信datetime_select是黑魔法。 我真正想弄清楚的是整个1i , 2i , 3i , 4i ……多个参数的东西。 具体如何在后端处理(activerecord,还有其他什么?)。 订单号后面的’i’是什么? 它是一个类型说明符吗? 如果是这样,可用的其他类型是什么? 我已经阅读了date_helper.rb的来源,它非常不透明。 这是我的动机: 我的模型中有一个:datetime列,我希望通过两个text_field输入视图:一个用于日期,一个用于时间。 它们需要经过validation,合并在一起,然后存储到datetime列中。 最终我将使用javascript日历在日期字段中输入日期。 有没有人这样做过? 我尝试使用虚拟属性(除了基本的railscast之外令人难以置信的无记录),问题是当创建一个新的activerecord对象并且具有nil属性时,虚拟属性失败(nil类的未定义方法strftime ,这是有道理的)。 有人有任何建议或最佳做法吗? 谢谢!

Rails 3:validationIP字符串

在Rails 3中,是否有内置的方法来查看字符串是否是有效的IP地址? 如果没有,validation的最简单方法是什么?

Rails:validation包含布尔失败测试

我试图确保我的模型的一个字段是一个布尔值,但我的测试继续失败。 阅读本文后: validationRspec和Rails中的布尔值以及此Rails:如何validation某些内容是否为布尔值? 我最终这样做: class Model { :in => [true, false] } end 我尝试过几种不同的测试方式(使用rspec和shoulda匹配器),而且由于我的测试一直在失败,我现在正在采用最愚蠢的方式(?)。 仍然,测试没有通过,我猜测有一些机制可以在某处转换价值。 以下是我用来了解发生了什么的事情: # create instance without setting value … # these work as expected model_instance.valid?.should be_false # passes model_instance.my_field = true model_instance.valid?.should be_true # passes model_instance.my_field = false model_instance.valid?.should be_true # passes # works as expected model_instance.my_field = “” model_instance.valid?.should be_false […]

Railsvalidation重定向

我正在尝试用rails编写的野兽论坛,并将此作为我一直面临的问题的一个例子。 论坛有一个主题/节目动作和视图,底部有一个表单,可以在主题中创建一个新post。 提交表单会发布到post/创建,如果validation通过重定向回主题/显示并且工作正常,但是如果validation失败(不包括正文字段),您将被重定向到相同的主题/显示并返回到表单,没有validation错误…通常如果validation失败,你就会留在任何/ create with render:action => new。 validation是否在重定向中丢失,以及使其运行的最佳方法是什么? 见下面的代码: PostsController.rb def create @post = current_user.reply @topic, params[:post][:body] respond_to do |format| if @post.new_record? format.html { redirect_to forum_topic_path(@forum, @topic) } format.xml { render :xml => @post.errors, :status => :unprocessable_entity } else flash[:notice] = ‘Post was successfully created.’ format.html { redirect_to(forum_topic_post_path(@forum, @topic, @post, :anchor => dom_id(@post))) } […]

通过FactoryGirlvalidation错误

我在通过FactoryGirlvalidation我的数据时遇到问题。 对于team.rb,自定义validation为has_only_one_leader和belongs_to_same_department class Team { where(active: true) } validate :has_only_one_leader validate :belongs_to_same_department def has_only_one_leader unless self.users.where!(designation: “Team Leader”).size == 1 errors.add(:team, “needs to have exactly one leader”) end end def belongs_to_same_department unless self.users.where!.not(department: self.department).size == 0 errors.add(:users, “should belong to the same department”) end end 我还将包括membership.rb和user.rb(仅限关联)仅供参考。 class Membership < ActiveRecord::Base belongs_to :team belongs_to :user end […]

如何通过检查URI是否引用给定的域名来validationURI?

我正在运行Ruby on Rails 4.1.1,我想通过检查URI是否在给定的域名内来validationURI。 也就是说, uri字符串可以作为params发送到我的控制器,我想检查uri “引用”我的应用程序域名www.myapp.com 。 当然, uri应该是有效的URI引用 。 # Invalid URIs www.website.com http://www.website.com http://www.website.com/ https://www.website.com/ ftp://www.website.com/ ftps://www.website.com/ http://www.website.com/some/path # Valid URIs www.myapp.com http://www.myapp.com http://www.myapp.com/ https://www.myapp.com/ ftp://www.myapp.com/ ftps://www.myapp.com/ http://www.myapp.com/some/path 我怎样才能做到这一点(也许只使用Ruby on Rails)? 注意:我正在validationURI,以便允许用户设置自定义重定向,并且我知道漏洞 。 我计划在application_controller.rb声明的方法中运行validation。

Ruby on Rails通过一对属性进行validation

我需要在Ruby on Rails上对我的模型进行validation。 我有2个字段的模型: user_id some_item_id 我在DB中有许多行具有相同的user_id,但具有不同的some_item_id。 我需要避免将此some_item_id复制到特定的user_id。 在Rails中为此存在一些“魔术”validation?

Rails 4 before_update条件对单个列的SQL开销

我的rails应用程序中有一个Player模型。 我正在评估的2列是最高级别和最高分数。 这是跨多个配置文件的单个玩家的统计数据跟踪,因此有可能这些值中的任何一个都可能低于数据库中的当前值。 因此,我只希望它更新特定列,如果传入的发布值大于数据库中的值。 阅读一些内置的validation选项,我无法像我想的那样工作,但是,我能够编写自己的validation工作,但代价是调用Player.find(id)该模型。 有没有办法解决这个问题,以便我的Player.update()不会同时导致UPDATE和SELECT? 这是我的模型: class Player self.highestLevel self.highestLevel = @p.highestLevel end end def eval_highestScore # if record in DB has higher value , update the value if @p.highestScore > self.highestScore self.highestScore = @p.highestScore end end def player_record @p = Player.find(id) end end 关于如何提高效率的任何想法,还是我应该不管它? 我一直在为Rails 4.x寻找更大更好的鼠标陷阱