2011-05-27 21 views
0

我想使用Object.find(PARAMS [])只與返回對象:stage_id =整數Rails的:如何處理查找(PARAMS [])

這裏是我的控制器代碼

def show 
    @lesson = Lesson.find(params[:id]) 
    @stage1 = @lesson.units(params[:stage_id] == 1) 
    @stage2 = @lesson.units(params[:stage_id] == 2) 

每課有許多單元,每個單元有一個stage_id = 1或stage_id = 2,我希望@ stage1成爲一個數組,其單位只有stage_id值爲1。

如何正確使用params只返回具有指定表值的單位?

+3

你似乎沒有了Ruby語言和/或者Rails的把握。你最好買一本關於ruby/rails的書,並閱讀它,而不是在這裏提出這樣的問題。 – 2011-05-27 06:12:03

+0

這是不幸的,因爲我已經通過幾本書和學習與stackoverflow似乎工作最好的,當我通過教程。你有什麼具體的建議? – yoshyosh 2011-05-27 06:39:40

+0

任何,真的。您問題中引用的代碼遠不是有效的。 Stackoverflow不應該是學習語言的地方,而是增加對語言的現有知識和/或解決RTFM或Google難以解決的問題。 – 2011-05-27 06:42:52

回答

2
def show 
    @lesson = Lesson.find(params[:id]) 
    @stage1 = @lesson.units.first(:conditions => { :stage_id => 1 }) 
    @stage2 = @lesson.units.first(:conditions => { :stage_id => 2 }) 
end 
+0

謝謝!爲什麼我們需要第一種方法? – yoshyosh 2011-05-27 06:30:41

+0

'@ lesson.units'返回一個關聯代理。它的工作原理類似於數組和模型類的混合。所以'first'告訴它返回一個對象而不是一個對象數組。 – 2011-05-27 06:58:33

+0

謝謝你,你的解釋讓人感覺很多:) – yoshyosh 2011-05-27 07:03:11

0

參考find

@stage1 = Unit.find(:all, :conditions => ["stage_id=? AND lession_id=?" 1, params[:id]]) 


@stage2 = Unit.find(:all, :conditions => ["stage_id=? AND lession_id=?" 2, params[:id]]) 
+0

非常感謝你這麼做,你決定不使用@lesson的原因是什麼? – yoshyosh 2011-05-27 06:32:25

0

如果「總是將與階段構成,有一兩件事你可以做幹起來你的代碼是有一個階段示範單位。這使得靈活性在未破壞代碼的情況下添加更多階段,假設關係已正確建立並且數據良好,則可以執行類似以下操作:

控制器代碼

@lesson = Lesson.find(params[:id]) 

視圖代碼(HAML)

- for stage in @lesson.stages 
    = stage.name 
    - for unit in stage.units 
    = unit.name 
+0

謝謝你的建議。我計劃在各個階段之外以各種方式使用這些單位。階段是起點。最終我會在其他課程中使用這些單元。很難完全知道我打算如何在構建Web應用程序時使用它們。這似乎是最難掌握的,因爲它總是在變化。 – yoshyosh 2011-05-27 07:08:53