У меня есть модель пользователя. У меня есть модель комментариев. Вот их отношение:

User.rb:
  has_many :replies, :through => :items, :source => :comments

Я пытаюсь распечатать все ответы Пользователя за прошедшие сутки. Сюда:

user.replies.find(:all, :conditions => [" created_at between ? AND ?", Time.zone.now.beginning_of_day, Time.zone.now.end_of_day])

И вот проблема, которую я получаю:

ruby-1.9.2-p180: 038> bob.replies.all (: conditions => ["created_at между ? И? ", Time.zone.now.beginning_of_day, Time.zone.now.end_of_day]) ActiveRecord :: StatementInvalid: Mysql :: Error: столбец created_at в предложении where неоднозначен: SELECT comments. * FROM comments INNER JOIN items ON comments. Item_id = items. Id WHERE ((items. User_id = 16)) AND (created_at между '2011-08-25 00:00:00' И '2011-08-25 23:59:59')

Похоже, проблема в моем отношении "Пользователь - комментарий". Но я действительно не понимаю, что происходит и как это исправить. Помощь приветствуется.

0
Alexander Savin 25 Авг 2011 в 20:51

2 ответа

Лучший ответ

Вам необходимо заменить created_at на comments.created_at в ваших условиях. Как вы можете видеть в сгенерированном запросе, есть две соединенные таблицы: comments и items, у них обеих есть created_at. Итак, ваш db немного запутан, о чем вы говорите.

2
rubish 25 Авг 2011 в 16:58

Чушь правильная; однако вы также можете переписать его так:

User.replies.find(:all, :conditions => {:created_at => Time.zone.now.beginning_of_day..Time.zone.now.end_of_day})
0
vise 25 Авг 2011 в 17:21