這是另外一個問題的延續,但因爲它是不同的,不過,我覺得我有更好的重新發布它作爲一個新的問題:軌如何引用當前對象模型
老問題
我添加測驗功能從哈特爾教程Twitter的應用程序,並且有下列型號:
用戶幾乎是一樣的教程:
class User < ActiveRecord::Base
has_many :followed_users, through: :relationships, source: :followed
has_many :takens, dependent: :destroy
has_many :questions, through: :takens
end
兩者是問題的id將用戶ID表:
class Taken < ActiveRecord::Base
belongs_to :user
belongs_to :question
end
沒有什麼問題感興趣:
class Question < ActiveRecord::Base
attr_accessible :category, :correct, :option1, :option2, :option3, :qn
end
我希望能夠表現出followed_users和追隨者在數字的順序他們採取的測試。在控制檯這可以通過有:
User.find_by_id(1).question_ids.count
然後,我可以這樣做:在控制檯
User.find_by_id(1).followers.first.question_ids.count
得到計數爲一個單一的跟隨者。
我覺得我快到了。
如何通過他們的「丹尼斯數」來分類追隨者和follow_users? (我也看着cache_count,起初看起來很有希望,但可能不是我所需要的...)
末老問題
這是從另一個問題的答案: rails order through count on other table
和我一起在User.rb這樣的方法去:
def users_sort_by_taken
User.find_by_sql("SELECT users.*
SELECT users.*
FROM users INNER JOIN takens
ON users.id = takens.user_id
GROUP BY users.id
ORDER BY count(takens.user_id) DESC")
end
它被調用在美國ers_controller.rb像這樣:
def following
require 'will_paginate/array'
@title = "Following"
@user = User.find(params[:id])
#@users = @user.followed_users.paginate(page: params[:page])
@users = @user.users_sort_by_taken.paginate(page: params[:page])
render 'show_follow'
end
(爲了參考,註釋行是從Hartl的教程) 都很好,但現在的當前用戶列表中包含的以下(由於上述的SQL)。我需要一種方法從users_sort_by_taken中消除當前用戶。
我想這可能工作:
WHERE (#{@current_user.id})
的方法,但是我得到這個錯誤:
的零名爲id,這將被錯誤地4 - 如果你真的想要的ID無,使用object_id
我想我可以通過它作爲一個參數... 但是我不在下面一行中已經有用戶@user了嗎?
@users = @user.users_sort_by_taken.paginate(page: params[:page])
爲什麼我無法從User.rb模型中的方法引用當前用戶?
換句話說,我可以將current_user(或@user或user)傳遞給SQL以從SQL結果中排除current_user嗎?
任何幫助表示讚賞。
我是唯一一個盲人,並且沒有看到他在'users_sory_by_taken'中使用'current_user'的位置?對於hartl教程, – Zippie 2013-04-08 07:51:03
,我認爲current_user可以在/helpers/sessions_helper.rb中找到。但我也試過@user和this_user = [@user,current_user,@current_user的各種組合]'......當然都是錯的! 'self'與Java中的'this'幾乎相同,那麼呢? – grooble 2013-04-08 08:04:33
是的,自己就像''這個'在其他語言 – 2013-04-08 08:07:02