2013-08-18 33 views
1

我花了最後一天嘗試不同的事情,並在答案上搜索互聯網,但我只是普通的卡住了。「未定義的方法」查詢中的錯誤

我有一個導軌應用程序(4.0),它記錄了不同升降機在健身房中製作的PB。

我想顯示1代表,3代表和5代表的最高權重。

我的控制器看起來像這樣。

@history = current_user.workouts.order("weight DESC","reps DESC").group_by(&:lift) 

在我看來的代碼則如下...

<% @history.each do | lift, workout | %> 
    <% name = lift[lift].downcase.gsub(/[ &]/,'') %> 
    <tr> 
    <td><%= link_to lift[lift], send("workouts_lift_#{name}_path") %></td> 
    <td><%= workout.where(:reps => 1).max_by(&:weight).weight %> kg</td> 
    <td><%= workout.where(:reps => 3).max_by(&:weight).weight %> kg</td> 
    <td><%= workout.where(:reps => 5).max_by(&:weight).weight %> kg</td> 
    </tr> 
<% end %> 

我不斷收到一個錯誤的地方法。我不清楚的是什麼問題,我可以得到它的使用

user.workouts.where(:reps=> 1).where(:lift => "Snatch") 
+1

什麼是錯誤? – dax

回答

2

您認爲在軌控制檯工作,即在each塊產生的workout變量是Workout類的一個實例,而不是課堂本身。 ActiveRecord查詢方法(如where)僅適用於類或關係,因此是錯誤。在不知道模型和關係的基礎架構的情況下,很難確切地說明您可以如何解決這一問題。

+0

啊,這很有道理,所以爲什麼我可以在控制檯中做到這一點。 雖然架構不是很複雜。用戶擁有多個鍛鍊項目,鍛鍊項目屬於一位用戶。 你需要了解什麼? – arsk

+0

它看起來像'鍛鍊'只是一個數組,所以你應該能夠使用[Enumerable#detect](http://ruby-doc.org/core-2.0/Enumerable.html#method-i-detect),而不是在哪裏找到訓練,其中代表== 1,3或5. –

+0

歡呼,幫助我堆。 – arsk