2011-03-22 63 views
3

返回記錄需要幫助這個請:admin_user_id,:
@follows = Follow.where("admin_user_id = ?", session[:id])
這從後續表,具有下列coloumns,返回記錄assignment_id。我現在想做到這一點:從用mysql 2和表3鋼軌

@assignments = Assignment.where("id = ?", @follows.assignment_id) 

的Asssignment表有以下幾列,:ID,:name.I嘗試了「@ follows.assignment_id」來代替每個ID,我可以那麼在使用查看類似,提前

<% @assignment.each do |assignment| %> 
    <%= assignment.name %> 
<% end %> 

感謝您的幫助

+0

請告訴我的錯誤? – 2011-03-22 20:06:44

+0

這是我得到的錯誤:未定義的方法'assign_id'for# Hishalv 2011-03-22 20:08:06

回答

3

這裏問題的一部分是您的第一個查詢:Follow.where(...)返回一個作用域,它將不會執行查詢,直到您嘗試訪問@follows對象。這可能不是什麼大不了的事,但你可能應該讓這個(除非你要動態地添加多個條件):

@follows = Follow.where("admin_user_id = ?", session[:id]).all 

這確保了@follows是按照對象的數組。因爲它是一個數組(而不是一個單一的Follow),所以沒有assign_id。你的第二個查詢改成這樣:

@assignments = Assignment.where(:id => @follows.map{|f| f.assignment_id}).all 

基本上,.map返回有人呼籲塊,而不是原來的對象的返回值的數組,而不是意義如下數組,它返回數組每個對象的賦值ID。當你通過這個數組作爲條件,它會生成一個SQL查詢是這樣的:

select * from assignments where id IN (1, 2, 3) 

如果你有如下分配ID爲1,2,和3

+0

我應該在這裏添加一個評論,凱爾的答案也是正確的,唯一的區別是在他的例子中,每個'f.assignment '調用會導致另一個查詢(除非您已經提前爲Follows加載了任務)。由於性能原因,這可能與您無關。只有兩種不同的方式獲得相同的結果。 – 2011-03-22 20:13:31

+0

謝謝,已經嘗試過並且有效。非常感謝 – Hishalv 2011-03-22 20:17:42

+0

@Hishal不客氣,祝你好運! – 2011-03-22 20:18:59

1

在你的模型:

class Follow < ActiveRecord::Base 
    belongs_to :assignment 
end 

對於分配

class Assignments < ActiveRecord::Base 
    has_many :follows 
end 

然後就可以調用

@assignments = [] 
@follows.collect {|f| @assignments << f.assignment} 

另外:

This is the error i get:undefined method `assignment_id' for #<ActiveRecord::Relation:0xb6d8104c> 

確保您的SQL表有一個名爲列assignment_id用一個整數值