Mysql Rails 3.2-ActiveRecord`where`查询,方法在属性上调用
在控制台中,我可以像这样查询我的Mysql Rails 3.2-ActiveRecord`where`查询,方法在属性上调用,mysql,ruby-on-rails,ruby,database,activerecord,Mysql,Ruby On Rails,Ruby,Database,Activerecord,在控制台中,我可以像这样查询我的Job表:jobs=Job.where(“created_at试试这个: Job.where(:created_at => Time.now.beginning_of_year..Time.now.end_of_year) 因为,调用Time.now可能会给出两个不同的年份(12月31日午夜之前和之后),最好先为当前时间创建一个变量,然后再将其用于查询: current_time = Time.now Job.where(:created_at =>
Job
表:jobs=Job.where(“created_at试试这个:
Job.where(:created_at => Time.now.beginning_of_year..Time.now.end_of_year)
因为,调用Time.now
可能会给出两个不同的年份(12月31日午夜之前和之后),最好先为当前时间创建一个变量,然后再将其用于查询:
current_time = Time.now
Job.where(:created_at => current_time.beginning_of_year..current_time.end_of_year)
试试这个:
Job.where(:created_at => Time.now.beginning_of_year..Time.now.end_of_year)
因为,调用Time.now
可能会给出两个不同的年份(12月31日午夜之前和之后),最好先为当前时间创建一个变量,然后再将其用于查询:
current_time = Time.now
Job.where(:created_at => current_time.beginning_of_year..current_time.end_of_year)
试试这个:
Job.where(:created_at => Time.now.beginning_of_year..Time.now.end_of_year)
因为,调用Time.now
可能会给出两个不同的年份(12月31日午夜之前和之后),最好先为当前时间创建一个变量,然后再将其用于查询:
current_time = Time.now
Job.where(:created_at => current_time.beginning_of_year..current_time.end_of_year)
试试这个:
Job.where(:created_at => Time.now.beginning_of_year..Time.now.end_of_year)
因为,调用Time.now
可能会给出两个不同的年份(12月31日午夜之前和之后),最好先为当前时间创建一个变量,然后再将其用于查询:
current_time = Time.now
Job.where(:created_at => current_time.beginning_of_year..current_time.end_of_year)
或者更简单地使用MySQL的原生YEAR()
函数:“YEAR(created_at)=?”
,它将接受时间。现在。YEAR
@MichaelBerkowski:哦,很有趣。感谢您的输入。:)@MichaelBerkowski,除了时间和日期处理函数往往是特定于数据库的,ActiveRecord太笨了,无法解决这个可移植性问题;请注意问题中的SQLite例外。当然,通过ORM实现数据库可移植性通常是浪费时间,除非您打算以艰难的方式(即您自己)实现或者在baby talk SQL中与数据库对话,所以这很少是一个真正的问题。@muistooshort:读了你的评论后,我也觉得像ActiveRecord这样的ORM没有很好的方法实现来生成这样复杂的查询。见鬼,Rails 4中引入了而不是,我想知道为什么他们花了这么长时间才发明了methActiveRecord确实提供了数据库的可移植性,但它只适用于正常的where和join查询,否则必须编写原始SQL才能在实际场景中完成这项工作,这再次扼杀了ORM的好处。您的想法很好。谢谢。这对我的示例很有用例如,但我仍然想知道如何在.where
查询中对属性调用方法这一更一般的问题。另一个例子是,如果我需要使用存储为字符串的时间属性进行时间比较。例如,我不能执行作业。where(“string\u time.to\u time>?”,time.now)
或者更简单地使用MySQL的原生YEAR()
函数:“YEAR(created_at)=?“
它将接受时间。现在。一年
@MichaelBerkowski:哦,很有趣。感谢您的投入。:)@MichaelBerkowski除了时间和日期处理函数往往是特定于数据库的,ActiveRecord太笨了,无法解决这个可移植性问题;请注意问题中的SQLite异常。当然,试图通过ORM实现数据库的可移植性通常是浪费时间,除非您打算以艰难的方式(即您自己)实现或者在baby talk SQL中与数据库对话,所以这很少是一个真正的问题。@muistooshort:在阅读您的评论后,我也觉得类似于ORM的ActiveRecord在生成类似这样的复杂查询方面的方法实现得很差/没有。见鬼,甚至连NOT
都在Rails 4中引入了,并且想知道他们为什么花了这么长时间来创建一个方法来生成这样一个有用的查询。ActiveRecord确实提供了数据库的可移植性,但它只适用于正常的where和join查询,否则必须编写原始SQL才能在实际场景中完成任务,这再次扼杀了ORM的优势。你的思想表达得很好。谢谢。这在我的示例中是有效的,但我仍然想知道如何在.where
查询中对属性调用方法这一更一般的问题。另一个例子是,如果我需要使用存储为字符串的时间属性进行时间比较。例如,我不能做工作。where(“string\u time.to\u time>?”,time.now)
或者更简单地使用MySQL的原生YEAR()
函数:“YEAR(created\u at)=?”
,它将接受时间。now.YEAR
@MichaelBerkowski:哦,很有趣。感谢您的投入。:)@MichaelBerkowski除了时间和日期处理函数往往是特定于数据库的,ActiveRecord太笨了,无法解决这个可移植性问题;请注意问题中的SQLite异常。当然,试图通过ORM实现数据库的可移植性通常是浪费时间,除非您打算以艰难的方式(即您自己)实现或者在baby talk SQL中与数据库对话,所以这很少是一个真正的问题。@muistooshort:在阅读您的评论后,我也觉得类似于ORM的ActiveRecord在生成类似这样的复杂查询方面的方法实现得很差/没有。见鬼,甚至连NOT
都在Rails 4中引入了,并且想知道他们为什么花了这么长时间来创建一个方法来生成这样一个有用的查询。ActiveRecord确实提供了数据库的可移植性,但它只适用于正常的where和join查询,否则必须编写原始SQL才能在实际场景中完成任务,这再次扼杀了ORM的优势。你的思想表达得很好。谢谢。这在我的示例中是有效的,但我仍然想知道如何在.where
查询中对属性调用方法这一更一般的问题。另一个例子是,如果我需要使用存储为字符串的时间属性进行时间比较。例如,我不能做工作。where(“string\u time.to\u time>?”,time.now)
或者更简单地使用MySQL的原生YEAR()
函数: