Я использую Rails 4. У меня есть приложение, где у меня есть много-ко-многим:Заказывайте граф на has_many: через
class User < ActiveRecord::Base
has_many :relationshipfollows, :foreign_key => "follower_id",
:dependent => :destroy
has_many :following, :through => :relationshipfollows, :source => :followed
end
class Project < ActiveRecord::Base
has_many :relationshipfollows, :foreign_key => "followed_id",
:dependent => :destroy
has_many :followers, :through => :relationshipfollows, :source => :follower
end
class Relationshipfollow < ActiveRecord::Base
belongs_to :follower, :class_name => "User"
belongs_to :followed, :class_name => "Project"
end
Я этот учебный курс: http://ruby.railstutorial.org/chapters/following-users?version=3.0#top
Но теперь я Я хотел бы перечислить все проекты, упорядоченные по количеству последователей. Как это:
1. project1 | 99 followers
2. project2 | 16 followers
3. project3 | 2 followers
...
Я новичок на рельсы, и я предполагаю, что я продолжаю делать ошибки, потому что я стараюсь много примеров, как это: Rails 3 Order By Count on has_many :through или has_many , through: relationship count
я попробовать этот метод: Project.joins(:relationshipfollows).group("relationshipfollows.project_id").order("count(relationshipfollows.project_id) desc")
Но у меня есть эта ошибка: SQLite3::SQLException: no such column: relationshipfollows.project_id: SELECT "projects".* FROM "projects" INNER JOIN "relationshipfollows" ON "relationshipfollows"."followed_id" = "projects"."id" GROUP BY relationshipfollows.project_id ORDER BY count(relationshipfollows.project_id) desc
И я попробовать другой метод:
Project.joins(:relationshipfollow).select('following.*, COUNT(followers.id) AS user_count').group('project_id').order('COUNT(followers.id) DESC')
Но у меня есть эта ошибка: Association named 'relationshipfollow' was not found on Project; perhaps you misspelled it?
Может кто-то пожалуйста, помогите мне найти правильное направление, как сделать все это работать?
сердечным приветом
Edit: Я думаю, что проблема его здесь. Когда я пытаюсь это:
Relationshipfollow.select(:followed_id, "COUNT(follower_id) AS total").group(:followed_id).order("total DESC")
он вернуть мне это:
=> # ActiveRecord::Relation [# Relationshipfollow id: nil, followed_id: 2, # Relationshipfollow id: nil, followed_id: 1, # Relationshipfollow id: nil, followed_id: 3]
Все проекты отсортированы по числу последователей и всех followed_id (проектов) находятся в хорошем состоянии в относительно моего теста. Но когда я присоединиться к этой моей модели проекта, как это:
Project.joins(:relationshipfollows).select(:followed_id, "COUNT(follower_id) AS total").group(:followed_id).order("total DESC")
он вернуть мне список проектов, но с PROJECT_ID NULL:
=> #ActiveRecord::Relation [# Project id: nil, # Project id: nil, # Project id: nil]
, что вы на самом деле хотите делать с запросами и что является результатом методов ActiveRecord ?? –
Я редактировал свой пост для большей ясности. Я хотел бы найти запросы для возврата списка проекта, заказанного по числу последователей.Я пробовал два разных метода (запросы), но никто не работал. Может быть, потому, что я ошибаюсь. – Bibou
попробуйте этот 'Project.joins (: relationshipfollows) .select ('follow. *, COUNT (followers.id) AS user_count'). Group ('project_id'). Order ('COUNT (followers.id) DESC')' и дайте мне знать результат –