Tag: activerecord

如何validation提交ActiveRecord的单个属性而不是其所有属性?

我正在使用Ruby on Rails 3,我想为提交ActiveRecord而不是其所有属性validation单个属性。 例如,在我的模型中,我有: validates :firstname, :presence => true, … validates :lastname, :presence => true, … 我想分别在:firstname和:lastname上运行validation 。 可能吗? 如果是这样,我该怎么做? PS:我知道出于validation目的,有一些方法,如“validates_presence_of”,“validates_confirmation_of”,……,但我只想使用上面的代码。

ActiveRecord,double belongs_to

我有2个型号: Link和User如: class Link < ActiveRecord::Base belongs_to :src_user belongs_to :dst_user end class User < ActiveRecord::Base has_many :links end 架构可能看起来像: +———-+ +——+ | Link | | User | +———-+ |——+ | src_user |—->| | | dst_user |—->| | +———-+ +——+ 我的问题是: 如何编辑User模型才能执行此操作 @user.links # => [list of links] (…如果可能的话,应该查询@ user.src_users + @ users.dst_users,以及unicity。) 我们能在ActiveRecord中使用SQL吗? 非常感谢。 (注意:我在Rails […]

Rails交易

我正在尝试使用ActiveRecord::Base.transaction 。 我认为使用Rails 1.2.6和mysql 5.0默认情况下回滚不起作用。 更多地玩它我发现在mysql连接中autocommit没有设置为0。 问题: 1)如何禁用所有连接的rails中的自动提交? 2)它是否会对其他不必交易的代码产生负面影响?

SQL查询返回nil表中没有的日期

我有一个表’my_table’。 它有以下数据: ID — Date 1 — 01/30/2012 2 — 01/30/2012 3 — 05/30/2012 我可以编写一个SQL查询来返回特定日期之间ID的计数,按月分组,如下所示: {“01/30/2012” => 2, “05/30/2012” => 1} 如何在请求的日期之间得到一个值为’0’的所有缺失月份的结果,如下所示: {“01/30/2012” => 2, “02/30/2012” => 0, “03/30/2012” => 0, “04/30/2012” => 0, “05/30/2012” => 1} 提前致谢。

使用ActiveRecord模型生成输入ID

在给定模型的情况下,如何生成输入的id属性? 例如,如果我有一个带有first_name属性的Person模型,则表单助手会打印出一个带有此html的文本框: 如何从代码中的其他位置生成person_first_name (如在控制器或某个地方)?

Rails 3 – 轻松使用Pascal Case列名

我们正在开始使用Java / SQL Server数据层编写的新开发的应用程序的Rails 3前端。 由于团队以前的经验,所有列名都是Pascal Case(Id,Name,MyTableId),表名是单数forms(不是复数)。 有没有办法轻松全局覆盖默认的rails约定以使用此数据模型? 我意识到这可以通过使用set_table_name和列别名来完成,但是这种方法违背了使用Rails快速开发应用程序的目的,因为我们必须复制现有的域层代码库。 我发现下面的代码片段有点满足我的需求,这是最好的方式/这仍然有效吗? http://snippets.dzone.com/posts/show/2034

Rails ActiveRecord如何关闭特定查询的记录

我在Rails中处于开发人员模式。 我试图使用AR将包含二进制数据的记录插入到DB中。 Edoc.create( :id_claim => @claim_index, :id_material => @doc_code, :size => @file_list.first[:size], :efile => params[:files][0].read ) 但是由于Rails使用整个文件内容进行查询,因此需要花费很多时间。 如何关闭记录特定查询?

Rails查找某些参数何时为空白

我有一个包含两个字段的搜索表单:x,y 执行搜索时,它将查找符合所有条件的记录。 但是,将两个条件中的任何一个都设置为“全部”,将其留空。 如果设置为all,我应该将params [:x]和params [:y]设置为什么。 params[:x] = ? unless params[:x] params[:y] = ? unless params[:y] users = User.where([“x = ? AND y = ?”, params[:x], params[:y]])

有没有办法确保ActiveRecord层次结构中每个记录有一个对象引用?

当我抓住一些分层的ActiveRecord结构时,似乎有很多数据库命中。 我使用:include选项改进了这一点,以尽可能多地充实结构。 即便如此,似乎ActiveRecord没有映射关系的对等方(例如父子)与对记录的唯一引用。 也就是说,我们获得了一个可导航的ActiveRecord结构,但据我所知,它不能保证给定记录的唯一副本。 node = Node.find(1, :include => {:document => :node}) node.object_id #A node.document.node.object_id #B although I expect/desire A 在ActiveRecord中不可避免? 还有其他人因为这样的缺点而转向其他ORM吗? (不要误解我的意思:ActiveRecord是一个很棒的工具。但是所有工具都有优点和缺点。) 假设我要编写自己的SQL查询(它甚至可以是存储过程)返回多个结果集(每个表一个),其中包含ActiveRecord层次结构的所有相关数据。 是否有一种无痛的方式,我可以显式映射关联,而不会让ActiveRecord错误地将我的显式映射误认为是为了创建新的关联?

如何避免ActiveRecord模型双重保存?

型号“一” class One < ActiveRecord::Base before_save :do_stuff private def do_stuff two = Two.find(8) two.field2 = 'Value' two.save! end end 型号“两个” class Two < ActiveRecord::Base before_save :do_stuff private def do_stuff one = One.find(7) one.field2 = 'SomeValue' one.save! end end 执行: two = Two.find(1) two.somefield = ‘NewVal’ two.save! 无限循环将开始。 什么是ruby-on-rails方式实现两个必须在before_save回调中互相改变的模型?