Include only the latest/newest associated record with active record?
This is a working scope with lambda to pass parameters to the scope to select the genre id.
scope :latest_with_genre, lambda do |searched_genre_id|
joins(:books)
.where('books.date_of_publication = (SELECT MAX(books.date_of_publication) FROM books WHERE books.author_id = authors.id)')
.where("books.genre_id = #{searched_genre_id}").group('author.id')
end
This answer Rails query through association limited to most recent record? from
Pan Thomakos helped me for the scope.
This answer Pass arguments in scope from keymone helped me for passing argument
I guess this should work
class author
attr_accessible :first_name, :last_name, :birthday
has_many :books
scope :latest, joins(:books).where('books.author_id = authors.id').order('date_of_publication DESC').group('authors.id')
end
Update
For your updated question,you need a scope like this in Book
model.
class book
attr_accessible :pages, :date of publication, :title, _genre_id
belongs_to :author
belongs_to :genre
scope :latest_with_genre, joins(:author,:genre).where("author_id =?","genre_id =?,author.id,genre.id).order('date_of_publication DESC').group('author.id','genre.id')
end
This should work i guess.