小编Dav*_*vid的帖子

Rails 3:.group()由created_at排序

什么是Rails 3的订购方式.group()结果是Activerecord(这里是"created_at")?

@messages = Message.group(:foo)
Run Code Online (Sandbox Code Playgroud)

只会导致显示最早的消息.我需要最新的展示.

我试过了

@messages = Message.group(:foo).having("created_at = MAX(created_at)")
Run Code Online (Sandbox Code Playgroud)

没有成功.任何提示赞赏!

澄清一下:我希望在自己内部订购该组,而不是正常的messages.order("...").如果没有简单的Activerecord语法,我也会对原始SQL感到满意


更新:尝试SQL方式,这应该工作:

@messages = Message.find_by_sql("
  SELECT messages.* 
  FROM messages 
  GROUP BY messages.foo 
  HAVING messages.created_at = MAX(messages.created_at) 
  ORDER BY messages.created_at DESC")
Run Code Online (Sandbox Code Playgroud)

但是这只检索单个记录(未分组的记录).据推测,分组的那些被省略.不知道为什么,所有记录都有:created_at和:foo值

activerecord group-by sql-order-by ruby-on-rails-3

13
推荐指数
2
解决办法
1万
查看次数

ActiveRecord查询has_many:通过模型

如何在"has_many:through"关系中查询具有特定分支的公司

  #company.rb
  has_many :branch_choices
  has_many :branches, :through => :branch_choices
Run Code Online (Sandbox Code Playgroud)

"查找所有分行ID为3的公司"

activerecord has-many-through ruby-on-rails-3

6
推荐指数
1
解决办法
5999
查看次数

使用特定时区保存Rails记录

如何用自己的特定时区和在蒂华纳举办的下一场活动在柏林举办一场活动?

要求用户为事件选择城市,作为例如+02:00的来源.

我想收到这样的时间代码:

eventstart = "2011-07-22T18:00:00+02:00"
Run Code Online (Sandbox Code Playgroud)

您将如何创建该表单?

更新:

由于许多原因,实现了标准UTC的保存很好.所以现在我在视图中改变一个时间字符串,为eventstart提供*distance_to_time_in_words*,具体取决于用户的本地时间.

来自柏林时间的蒂华纳活动:

old_zone = Time.zone
#=> "Berlin"
Time.zone = "Tijuana"
t = Time.zone.parse(eventstart.to_s[0..-7])
#=> 2011-07-22 18:00:00 +08:00
Time.zone = old_zone
#=> "Berlin"
distance_of_time_in_words(Time.now.in_time_zone, t)
#=> "9 hours"
Run Code Online (Sandbox Code Playgroud)

繁琐,但现在工作.欢迎改进的想法!

timezone ruby-on-rails

4
推荐指数
1
解决办法
1958
查看次数

Rails"任何?" 实例方法回调?

如果通过此'.any'电话找到帖子,如何收到帖子的ID ?

<% if @posts.any? {|p| p.title == my_title} %>
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails callback any

3
推荐指数
1
解决办法
6399
查看次数