Tag: activerecord

Rails安全性:完全避免批量分配

我倾向于不需要生产代码中的质量分配function。 (在我的测试代码中,我经常使用它,但在这些情况下,我确实想要设置任意列。) 因此,如果在我的生产代码中,我只是避免使用这些forms: Article.new(params[:article]) # or create article.attributes = params[:article] article.update_attributes(params[:article]) 而是始终手动枚举所有属性,如下所示: Article.new(:title => params[:article][:title], :body => params[:article][:body], …) 我是否从质量分配安全问题中attr_accessible attr_protected (即使不使用attr_accessible / attr_protected )? 编辑:我不只是禁用批量分配的原因是,我希望能够编写Article.create!(:blog_id => @blog.id, …) ,其中blog_id是一个“unsave”属性。

添加和删​​除has_many:through关系

从Rails协会指南中,他们使用has_many演示了多对多关系:通过如下: class Physician :appointments end class Appointment < ActiveRecord::Base belongs_to :physician belongs_to :patient end class Patient :appointments end 我如何创建和删除约会? 如果我有一个@physician ,我是否可以编写类似下面的内容来创建约会? @patient = @physician.patients.new params[:patient] @physician.patients << @patient @patient.save # Is this line needed? 删除或销毁代码怎么样? 此外,如果在约会表中不再存在患者,它是否会被销毁?

如何在服务器控制台上显示sql结果

在Rails v2.3 , Ruby 1.8中 ,如果我在我的模型类中运行带有以下代码的sql语句 : ActiveRecord::Base.connection.execute(“select count(*) from cars;”) 如何在服务器控制台中显示查询结果? 我试过了 : rslt = ActiveRecord::Base.connection.execute(“select count(*) from cars;”) p rslt 但它只返回服务器控制台上的“MySQL结果对象”,而不是确切的结果。

如何最好地将地址与rails中的多个模型相关联?

关于SO的这个问题似乎与我的问题有关,但我不确定我的问题是否得到了回答。 一个地址可以属于多个模型(UserProfile和Event)实现这个的正确方法是什么? 基本表: user_profiles(id) events(id) 实现地址表的选项: addresses(id,user_profile_id,event_id) 这种方法似乎很糟糕,因为如果明天地址需要属于另一个模型,我必须添加该id字段。 此外,我还不知道,但添加一个新的id字段可能会导致一些代码中断? addresses(id,model_type,model_id) 这是多态的,对吧。 我不知道为什么,但我对此感到警惕? 还有其他方法吗? 注意 : 我想我可以制作这样的表格,我想: user_profiles(id,address_id) events(id,address_id) 但是,这意味着相同的address_id可以属于不同的模型。 我想它不应该那样,因为例如说事件的地址需要改变,但它不应该影响user_profile的地址。 所以这将是这样的(我认为这是错误的): @current_user_profile.address = some_new_address #this would have changed the address for both the user_profile *and* the event @current_user_profile.save

在gem中转换ActiveRecord的扩展名

这个扩展为所有app模型创建了cache_find方法(我使用这篇文章创建了这个)。 配置/ active_record_extension.rb require ‘active_support/concern’ module ActiveRecordExtension extend ActiveSupport::Concern # add your instance methods here def flush_find Rails.cache.delete([self.class.name, :cached_find, id]) end included do after_commit :flush_find end module ClassMethods def cached_find id Rails.cache.fetch([self.name, :cached_find, id]) { self.find(id) } end end end # include the extension ActiveRecord::Base.send(:include, ActiveRecordExtension) 我将此代码转换为gem并添加到此repo中 。 所以我想动态添加这些方法,如下所示: class User << ActiveRecord::Base # id, […]

Fork上的Fork,Ruby,ActiveRecord和File Descriptors

我理解当我们分叉一个进程时,子进程inheritance父类打开文件描述符和偏移的副本。 根据手册页,这指的是父母使用的相同文件描述符。 基于该理论在以下程序中 puts “Process #{Process.pid}” file = File.open(‘sample’, ‘w’) forked_pid = fork do sleep(10) puts “Writing to file now…” file.puts(“Hello World. #{Time.now}”) end file.puts(“Welcome to winter of my discontent #{Time.now}”) file.close file = nil 问题1:hibernate10秒的分叉进程不应该丢失其文件描述符,并且在父进程完成并关闭文件并退出时无法写入文件。 问题2:但无论出于何种原因,如果这都有效,那么ActiveRecord在这种情况下如何失去连接。 它只有在我设置时才有效:reconnect => true在ActiveRecord connect上:reconnect => true它是否可以实际连接,这意味着它失去连接。 require “rubygems” require “redis” require ‘active_record’ require ‘mysql2’ connection = ActiveRecord::Base.establish_connection({ :adapter […]

Rails会破坏所有最新的n条记录

如何使用Rails的ActiveRecord销毁除最新的n条记录之外的所有记录? 我可以使用顺序和限制获得最新的n条记录但是如何销毁反转?

不具有区分大小写的搜索活动记录

我使用rails 3.0.4 这是我的rails应用程序中的一段Arel查询,如何使用upcase方法以数据库无关的方式进行无区分大小写的搜索? Customer.where(“company_id = ? and (firstname like ? or lastname like ? or reference like ?)”, current_user.company_id, “%#{params[:query]}%”, “%#{params[:query]}%”, “%#{params[:query]}%”) 谢谢

除了rails活动记录validation中的错误消息之外,还有一种方法可以返回错误代码吗?

在rails activerecordvalidation中,通常如果validation失败,它将在模型的errors属性中添加错误消息,但是我们的客户端要求除了错误消息之外还返回错误代码,例如,我们有一个Bill模型,它具有一个msisdn属性,如果msisdn为null,则错误代码为101,如果msisdn不投诉MSISDN格式,则错误代码为102,当客户端通过REST接口提交请求时,如果validation失败,我们应该返回一个像json的对象 bill: { error_code: 101, error_message: “msisdn can’t be null” } 除了错误消息之外,有没有办法告诉activerecord生成错误代码? 非常感谢。

Railsvalidation上下文

我需要帮助我的ActiveRecord模型。 我使用内置上下文选项进行基于上下文的validation(mis): validates :foo, :on => :bar, :presence => true model = Model.new model.foo = nil model.valid? # => true model.save # works as expected model.valid?(:bar) # => false model.save(:context => :bar) # fails and returns false 但是在accepts_nested_attributes_for :model使用我的模型并调用parent.save失败(validation被调用并返回false),任何建议或解决方案? 仍然没有答案? 为了解释我的问题:我有一个名为Form的模型,它有很多Field 。 用户应该在提交时看到validation错误,但无论如何都应该保存表单(有和没有错误)。 有不同类型的Field ,每个都有全局validation(以确保数据库一致性)和自己特定的用户定义validation(validation用户输入的数据)。 所以我的Field看起来像那样: # Global validations, to ensure database consistency # If […]