Я надеюсь, что некоторые из вас, гуру sql, могут помочь мне построить относительно сложный (для меня в любом случае) запрос в rails.У меня есть две соответствующие модели: модель истории и модель почты.
class Story < ActiveRecord::Base
attr_accessible :title
belongs_to :user
has_many :posts,
:dependent => :nullify
class Post < ActiveRecord::Base
attr_accessible :contents
belongs_to :story, :touch => true
belongs_to :user, :touch => true
Каждый экземпляр истории служит оболочкой для нескольких экземпляров записей.Я хочу иметь возможность искать в базе данных истории, в которых есть записи, созданные в определенный период времени, и, если существует история, в которой сообщения были созданы в указанный период времени, вернуть все атрибуты истории вместе с этим.Последнее созданное сообщение (также все атрибуты), созданное за указанный период времени.Я могу получить атрибуты истории и post_id, но не могу понять, как получить остальные атрибуты записи.
Вот что я получил в Post.rb:
scope :within_user_preferred_date_range, lambda { |user|
where("posts.created_at BETWEEN ? AND ?",
(Time.now.midnight - user.preferences[:start_story_date_offset_in_days].days),
(Time.now - user.preferences[:end_story_date_offset_in_days].days )) }
####################################
def self.close_timely_posts(user)
Post.includes(:story).within_user_preferred_date_range(user).select("DISTINCT(story_id)")
end
Это создает следующий SQL-запрос, который, очевидно, не совсем то, что мне нужно:
←[1m←[35mPost Load (0.0ms)←[0m SELECT DISTINCT(story_id) FROM `posts` WHERE
(posts.created_at BETWEEN '2011-06-03 07:00:00' AND
'2011-06-06 19:34:40') ORDER BY posts.created_at DESC
←[1m←[36mStory Load (0.0ms)←[0m ←[1mSELECT `stories`.* FROM `stories` WHERE (`stories`.`id` IN (70,57,53,55,16,54,51,56,52,60,59,58))←[0m
Любая помощь, которую вы можете оказать с этим запросом, будет принята с благодарностью!