草庐IT

castle-activerecord

全部标签

ruby-on-rails - 将 Add 方法添加到 ActiveRecord 数组

我有模型类别和产品。如果我使用category.products该项目被添加到数组中,记录被保存到数据库中。我尝试将以下“添加”方法添加到数组类中,虽然它确实将new_product添加到数组中,但不会将其保存到数据库中。这是为什么?classArraydefadd(item)self更新:collection_proxy.rb有以下方法:def所以下面的扩展有效:classActiveRecord::Relationdefadd(*records)proxy_association.concat(records)&&selfendend解决方案:为CollectionProxy添加一

ruby-on-rails - 插件中的 Rails ActiveRecord::Observer

我想为现有的Rails应用程序添加问题观察器。我创建了一个插件,并在插件的app/model下保存了custom_observer.rb当我将:custom_observer添加到config/application.rb中的config.active_record.observers时它起作用我试过类似的东西RedmineApp::Application.configuredoconfig.after_initializedoconfig.active_record.observers在插件的init.rb中,但这不起作用。这样做的更好方法是什么?谢谢 最

ruby-on-rails - using 和有什么不一样?和 % 在清理 ActiveRecord 中的字段时?

我一直对使用问号之间的区别感到困惑,例如Foo.find(:all,:conditions=>['barIN(?)',@dangerous])并使用sprintf样式字段类型,例如Bar.find(:all,:conditions=>['quxIN(%s)',@dangerous])在净化输入。是否有任何安全优势,如果你知道你正在寻找一个数字-比如一个ID-而不是一个字符串,使用%dover?,或者当一个字符串出现时你只是要求一个大的讨厌错误?Rails3和4中更新的.where语法是否改变了这一点? 最佳答案 %s用于字符串。主要

ruby-on-rails - 未定义的方法 `each' 为 "#<Complaigns::ActiveRecord_Relation:0x00000003cfb4c8>":String

我有一个名为Complaign的模型,它具有一些其他属性以及投诉日期(c_date)。在ComplaignController中,我有一个indexView,它显示所有的complaigns。有一个从日期到日期的过滤器。过滤后,它工作正常,并正确显示在这些日期触发的投诉。现在我希望将此查询的结果传递给不同的方法,比如导出方法。我想从索引View中传递它,因为它存储在@complaigns中。这是我的索引方法:defindexifparams[:from]&¶ms[:to]from=params[:from].to_dateto=params[:to].to_date@compl

ruby-on-rails - Rails 缓存 ActiveRecord 结果

我当前的主页显示了所有可用的类别以及每个类别的所有帖子数。这当然会影响网站的性能,我只是想知道是否可以缓存它?我不介意缓存是否有点过时以及每次刷新时帖子的数量是否不是100%准确,但我希望它仅每30分钟左右进行一次查询。 最佳答案 在Rails中,您几乎可以缓存所有内容。您可以缓存部分或查询。您也可以手动使它们过期。例如cache('categorylist')dorenderpartial:'such'end并且在post.rb模型中,在每次创建帖子后,重置它并强制它在下一次运行时评估after_create{Rails.cach

ruby-on-rails - Ruby On Rails 5,activerecord 查询,其中模型关联 ID 包含数组中的所有 ID

我有一个食谱和配料协会。我正在尝试返回在给定整数数组中具有所有成分ID的食谱。例如。我使用多种成分进行搜索,我想返回包含所有成分的任何食谱。如果提供的配料太多,但Recipe包含了所有配料,它也应该返回配方。我已经尝试了一些东西,Recipe.joins(:ingredients).where(ingredients:{id:ids})它返回包含任何成分的食谱Recipe.joins(:ingredients).where('ingredients.idLIKEALL(array[?])',ids)这给出了一个错误:错误:运算符不存在:整数~~整数如何才能只找到包含数组中给定的所有ID

ruby-on-rails - 从 YAML 加载 ActiveRecord 对象时出现反序列化错误

当我尝试反序列化一个新的ActiveRecord对象时为什么会出现这个错误:[Dev]>YAML.load(Identity.new.to_yaml)Delayed::DeserializationError:Delayed::DeserializationError与此同时,这个带有现有AR对象的示例按预期工作:[Dev]>YAML.load(Identity.first.to_yaml)=>#一些看起来相关的事情,基于对答案的搜索:我正在使用ruby1.9.2p318、rails3.1.3、delayed_job2.1.4和我的YAML::ENGINE.yamler是syck。我该

sql - 如何使用 ActiveRecord 创建多列 IN 谓词?

我有以下“距离”表:╔════╦════════════╦════════════╦═════════════════╦═════════════════╦══════════╗║id║origin_lat║origin_lng║destination_lat║destination_lng║distance║╠════╬════════════╬════════════╬═════════════════╬═════════════════╬══════════╣║1║1.234567║2.345678║3.456789║4.567890║10║║2║5.678901║6.78901

ruby-on-rails - Rails ActiveRecord 字符串字段编码与 Ruby 字符串编码

上下文:转码来自外部源的字符串以保存在数据库中从gem中,我得到一个字符串s有latin-1-编码的内容,我想将其存储在Rails模型中。r=MyRecord.new(mystring:s)#...r.save因为我的PostgreSQL数据库使用UTF-8编码,将其字符串字段设置为字符串后保存模型会在该字符串包含某些非ASCII字符时导致错误:ActiveRecord::StatementInvalid:PG::CharacterNotInRepertoire:ERROR:invalidbytesequenceforencoding"UTF8":0xdf0x65...我可以通过对字符

ruby-on-rails - 使用通配符对数组列进行 Activerecord 查询

假设我有一个包含数组列phones的Customer模型。很容易找到给定电话的所有客户Customer.where('?=ANY(phones)','+79851234567')但是当我想找到手机与给定手机相似的客户时,我无法弄清楚如何将LIKE与通配符一起使用,例如:Customer.where('ANY(phones)LIKE?','+7985%')我正在使用PostgreSQL9.5和Rais4.2有什么想法吗? 最佳答案 我认为,首先,最好使用带有字段customer_id、phone_number的第二台电话。我认为这是更