Вопрос по sorting, ruby-on-rails – Rails: как отсортировать отношение «многие ко многим»

0

У меня есть отношение многие ко многим между модельным пользователем и изображением. Они связаны таблицей соединений, называемой Picturiization.

Если я получу список пользователей одной картинки, то есть picture.users - & gt; как я могу убедиться, что полученный результат отсортирован путем создания строки Picturizing (то есть порядка, в котором изображение было связано с пользователем). Как бы это изменилось, если бы я хотел получить это в порядке модификации?

Спасибо!

Edit Может быть что-то вроде

picture.users.where(:order => "created_at")
but this created_at refers to the created_at in picturization

Ваш Ответ

3   ответа
1

sequence

default_scope :order => 'sequence ASC'

default_scope :order => 'modified_at DESC'
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Karan
0

picture.users.order("picturizations.created_at DESC")
0

sort many-to-many relation.

Solution1: In Rails Way
picture.users.where(:order => "created_at")

def self.default_scope
  return Picturization.all.order(weight: :desc)
end  

ids = Picturization.where(user_id:user.id).order(created_at: :desc).ids

picture.users.order("field(picturizations.id, #{ids.join(",")})")

SELECT `users`.* 
FROM `pictures` INNER JOIN `picturizations` 
ON `pictures`.`id` = `picturizations`.`picture_id` 
WHERE `picturizations`.`user_id = 1#for instance 
ORDER BY field(picturizations.id, 9,18,6,8,7)#for instance
Solution2: In raw SQL Way

order by

SELECT `users`.* 
FROM `pictures` INNER JOIN `picturizations` 
ON `pictures`.`id` = `picturizations`.`picture_id` 
WHERE `picturizations`.`user_id = 1

order by picturizations.created_at desc

Похожие вопросы