2011-04-06 48 views
6

假設我有QuestionsAnswer模型,我將所有答案都提交給了一個特定的問題。Rails:獲取記錄的位置?

我可以很容易地做一個each_with_index並找出答案的索引或「放置」是什麼(關於該特定問題的其他答案)。

但是,說我想得到一個具體的答案...我怎麼能仍然找出答案的索引是什麼與所有其他答案有關的具體問題。

Answer數據:

ID text  question_id 
23 awesome 3 
27 boooyah 3 
38 snap  3 

如果我這樣做Answer.find(27)我怎麼能弄清楚這個紀錄是(假設我的ID訂購...雖然我可以用任何字段順序)的第二項。

+0

是位置是非常重要的給你,然後就在你的表中添加一個位置列。 – corroded 2011-04-06 17:44:29

+0

但它需要動態。就像我做'ORDER BY created_at'那樣改變了位置。我不想讓他們保持一定的順序,我想知道他們在哪個特定的順序。 – Shpigford 2011-04-06 17:45:21

+0

除非你像我建議的那樣保存數據庫中的位置。如果你保存了位置,boooyah將始終有位置2,不管你的查詢是什麼 – corroded 2011-04-06 17:46:14

回答

6
class Answer < ActiveRecord::Base 
    belongs_to :question 

    def position(column = 'id', order = 'ASC') 
    order_by = "#{column} #{order}" 
    arrow = order.capitalize == "ASC" ? "<=" : ">=" 
    question.answers.where("#{column} #{arrow} (?)", self.send(column)).order(order_by).count 
    end  
end 

Answer.find(27).position 
Answer.find(27).position("updated_at") 
Answer.find(27).position("updated_at", "DESC") 
+0

這隻適用於'id'排序。由於您始終應用'where('id <=?',self.id)'條件,然後獲取計數,所以按其他順序排列會產生相同的效果。 – ctcherry 2011-04-06 18:13:46

+0

是的,我的錯。 – fl00r 2011-04-06 18:16:23

+0

現在* *會工作,並且同意'count'更高性能。 – ctcherry 2011-04-06 18:23:01

1

像這樣的東西應該可以工作,它沒有經過測試,但你可以看到這個概念。

​​3210
+0

使用sql'count'更有效率的性能 – fl00r 2011-04-06 18:04:59