我一直在摸索着我的頭一陣子,雖然我確信它是一個愚蠢的錯誤,但我已經達到了必須諮詢的地步,如果我要保存我留下的毛囊。ActiveRecord查詢返回一個不正確的模型
我已經在Rails(3.1.2)中編寫了一個函數,它應該返回一個滿足特定標準的填充了ActiveRecord模型對象(在這種情況下爲用戶)的數組。標準是用戶的當前列表(由字段active_list_id表示)不能爲零。代碼如下:
def build_list_array
@lists = Array.new
User.all.each do |user|
@active_list_id = user.active_list_id
@lists<< List.find(@active_list_id) if @active_list_id != nil #TODO WHAT?!? WHY IS THIS RETURNING USERS?
end
end
正如你所看到的,我初始化一個空數組,通過所有用戶的循環和增加他們的活動列表的數組,如果用戶記錄相關的引用不是零。問題是,這是返回用戶對象,而不是列表對象。
下面是用戶和列表模式的關聯:
user model:
has_many :lists
has_many :tasks
list model:
belongs_to :user
關於參考的簡短到active_list:一個用戶可以有多個列表,但只有一個在任何時間處於活動狀態。因此,我需要在用戶記錄中引用該列表。那麼,活動列表就不是典型意義上的外鍵。
我感謝所有幫助您可以給我...謝謝=)
我並沒有完全回答你的問題,而是IMO,最簡單的方法是:1.用'default:false'爲你的'lists'表添加一個布爾型字段2.添加'has_one:active_list,conditions:where( active:true)'到你的'User'模型。 3。將'scope:active,where(active:true)'添加到'List'模型中。 4.查詢'@lists = List.active'。在獎勵你有非常好的方法:'User.active_list','list.active?'等 – Damien 2012-01-30 21:37:14
2.'has_one:active_list,class_name:'List',條件:['active =?',true]'這更好... – Damien 2012-01-30 21:47:07