爲了在用戶的「顯示」頁面上顯示這些記錄,我很難拔出一組與用戶自相關的記錄。在控制器計數關係中尋找自我參照
這裏的想法:
用戶(current_user
)速率之外的兩個用戶(user_a
和user_b
)之間的兼容性。他們可以對兼容性進行正面評價或負面評價:評價兩個「兼容」用戶在user_a和user_b之間創建一個positive_connection
,並將它們評爲「不兼容」會創建一個negative_connection
。所以有positive_connection,negative_connection和user的模型。
現在我需要顯示只有那些用戶overall_positively_connected_to(@user)
(即其中positive_connections_to(@user).count > negative_connections_to(@user).count)
這是我必須的,但我不能得到任何進一步的:
用戶模式:
def overall_positive_connected_to(user)
positive_connections_to(user).count > negative_connections_to(user).count
end
def positive_connections_to(user)
positive_connections.where("user_b_id = ?", user)
end
def negative_connections_to(user)
negative_connections.where("user_b_id = ?", user)
end
控制器
@user.user_bs.each do |user_b|
if user_b.overall_pos_connected_to(@user)
@compatibles = user_b
end
end
代碼中,我控制器顯然是錯誤的,但我應該怎麼做呢?我對rails(和sql)完全陌生,所以可能做了一些天真的事情。
任何幫助將是偉大的。
感謝馬修 - 那正是我一直在尋找的。事實上,我發現最終更簡單地完全改變我的模型,以便用戶首先建立兩個其他用戶之間的連接,然後對該連接進行投票。不像您的解決方案那麼優雅,但它適用於我的目的。 – jonic 2011-06-14 09:05:51
是的,我應該建議你打出一個單獨的模型來兌現這些數字。否則,任何大型數據集都會變慢。你也可以考慮Mongo,因爲它可以很容易地做到這一點。請查看https://github.com/vinova/voteable_mongo,因爲您可以對此使用類似的想法 – 2011-06-15 06:44:27