Rails 4.1 / ActiveRecord / SQL ok但不返回任何记录

时间:2015-05-05 11:18:41

标签: ruby-on-rails ruby activerecord

现在使用jruby 1.7.18(1.9.3p551)将我的Rails应用程序从3升级到4.1。

有一个名为PartyMembership的类,它有两个整数属性:from,:to。

在此课程中,可以按日期过滤PartyMemberships。获取所有条目:from,:to matches。

scope :at_date, lambda { |date| base.where(base.condition_for_date(date)) }

以下方法生成所需的sql查询:

def condition_for_date(date)
      ["(#{table_name}.from IS NULL OR #{table_name}.from <= ?) AND (#{table_name}.to IS NULL OR #{table_name}.to >= ?)", date, date]
end 

虽然日期是年和月的整数组合。 (例如201101)

现在的问题是,当没有:指定时,ActiveRecord不会返回任何条目。当我直接在mysql控制台上执行生成的语句时,使用相同的数据库,返回了条目。

SELECT `party_memberships`.* FROM `party_memberships`  
WHERE `party_memberships`.`candidate_id` = 26353238 
AND (
  (party_memberships.from IS NULL 
   OR party_memberships.from <= 201002
  ) 
 AND (
   party_memberships.to IS NULL 
   OR party_memberships.to >= 201002)
 )  
 ORDER BY `party_memberships`.`from` ASC, 
 `party_memberships`.`from` DESC

当我尝试在rails控制台上执行SQL时,也没有返回任何条目。

ActiveRecord::Base.connection.execute(query)

什么原因可以阻止ActiveRecord获得正确的结果?

编辑:

序列化存在问题。当日期为nil时,它在db中存储0而不是NULL。在rails中,所有数据库操作都在事务中运行,该事务在每次测试后都会回滚。所以不可能从mysql控制台看到数据库的任何变化。这就是为什么创建的sql语句在mysql控制台上执行时返回结果的原因。

0 个答案:

没有答案