草庐IT

Activerecord

全部标签

ruby-on-rails - 当没有记录时 find() 为 nil

在我当前的Rails程序中,当我使用类似的东西时user=User.find(10)当没有ID=10的用户时,我会有如下异常:ActiveRecord::RecordNotFound:Couldn'tfindUserwithID=10我可以得到nil而不是引发异常吗,所以当我做类似的事情时:unlessuser=Challenge.find(10)puts"someerrormsg"end我只想在没有记录的时候得到nil,我不想使用begin/rescue谢谢 最佳答案 是的,只是做:Challenge.find_by_id(10)

ruby-on-rails - 如何覆盖 ActiveRecord 模型中的 getter 方法?

我正在尝试覆盖ActiveRecord模型的getter方法。我在模型Category中有一个名为name的属性,我希望能够执行如下操作:defnamename_trans||nameend如果name_trans属性不为nil,则返回它,否则返回name属性。我该怎么做?这应该像这样正常调用:@category.name 最佳答案 RailsStyleGuide建议使用self[:attr]而不是read_attribute(:attr)。你可以这样使用它:defnamename_trans||self[:name]end

ruby-on-rails - ActiveRecord.find(array_of_ids),保留顺序

当您在Rails中执行Something.find(array_of_ids)时,结果数组的顺序不取决于array_of_ids的顺序。有什么办法可以找到并保留顺序吗?ATM我根据ID的顺序手动对记录进行排序,但这有点蹩脚。UPD:如果可以使用:order参数和某种SQL子句指定顺序,那么如何? 最佳答案 奇怪的是,没有人提出这样的建议:index=Something.find(array_of_ids).group_by(&:id)array_of_ids.map{|i|index[i].first}除了让SQL后端执行它之外,尽

ruby-on-rails - 将对象数组转换为 ActiveRecord::Relation

我有一个对象数组,我们称它为Indicator。我想在此数组上运行Indicator类方法(defself.subjects种类、范围等的方法)。我知道在一组对象上运行类方法的唯一方法是让它们成为ActiveRecord::Relation。所以我最终求助于将to_indicators方法添加到Array。defto_indicators#TODO:Makethislessterrible.Indicator.whereid:self.pluck(:id)end有时我会在类方法中链接很多这样的范围来过滤结果。因此,即使我在ActiveRecord::Relation上调用方法,我也不知

ruby-on-rails - 验证 Rails 3 的自定义消息

Rails引入了新的方法来验证模型内部的属性。当我使用validates:title,:presence=>true它有效,但是当我尝试添加自定义消息时validates:title,:presence=>true,:message=>"Storytitleisrequired"产生错误Unknownvalidator:'message' 最佳答案 试试这个validates:title,presence:{message:"Storytitleisrequired"} 关于ruby-o

ruby-on-rails - 在模型 : how do I include helper dependencies? 中使用助手

我正在编写一个模型来处理来自文本区域的用户输入。遵循http://blog.caboo.se/articles/2008/8/25/sanitize-your-users-html-input的建议,我在保存到数据库之前清理模型中的输入,使用before_validate回调。我模型的相关部分如下所示:includeActionView::Helpers::SanitizeHelperclassPost%w(biu))endend不用说,这是行不通的。当我尝试保存新帖子时出现以下错误。undefinedmethod`white_list_sanitizer'for#显然,Sanitiz

ruby-on-rails - rails 5 : ActiveRecord OR query

如何在Rails5ActiveRecord中执行或查询?此外,是否可以在ActiveRecord查询中将or与where链接起来? 最佳答案 在ActiveRecord查询中将or子句与where子句链接起来的能力将在Rails5。查看relateddiscussionandthepullrequest.因此,您将能够在Rails5中执行以下操作:获取id1或2的post:Post.where('id=1').or(Post.where('id=2'))其他一些例子:(A&&B)||C:Post.where(a).where(b).

ruby-on-rails - 为 Rails 4 禁用 ActiveRecord

我想在Rails4中禁用ActiveRecord。我在config/application.rb中做了以下操作requireFile.expand_path('../boot',__FILE__)#require'rails/all'--commentedrequire"action_controller/railtie"require"action_mailer/railtie"#require"active_resource/railtie"noneed#require"rails/test_unit/railtie"noneed#require"sprockets/railtie

sql - Rails 4 LIKE 查询 - ActiveRecord 添加引号

我正在尝试像这样做一个类似的查询defself.search(search,page=1)paginate:per_page=>5,:page=>page,:conditions=>["nameLIKE'%?%'ORpostal_codelike'%?%'",search,search],order=>'name'end但是当它运行时,某些东西会添加引号,导致sql语句像这样出现SELECTCOUNT(*)FROM"schools"WHERE(nameLIKE'%'havard'%'ORpostal_codelike'%'havard'%')):所以你可以看到我的问题。我正在使用Rai

ruby-on-rails - 如何避免运行 ActiveRecord 回调?

我有一些模型具有after_save回调。通常这很好,但在某些情况下,例如创建开发数据时,我想在不运行回调的情况下保存模型。有没有一种简单的方法可以做到这一点?类似于...Person#save(:run_callbacks=>false)或Person#save_without_callbacks我查看了Rails文档,但没有找到任何内容。然而,根据我的经验,Rails文档并不总能说明全部情况。更新我找到了ablogpost这解释了如何从这样的模型中删除回调:Foo.after_save.clear我找不到记录该方法的位置,但它似乎有效。 最佳答案