2013-04-30 63 views
0

我在worequests模型範圍:Rails的範圍試驗鑑於

scope :notcompl, where("statuscode_id != ?", Statuscode.last.id) 

我想只顯示在worequests的編輯按鈕顯示頁面,如果worequest是notcompl。我試過這個,並得到了未定義的方法:

<% if @worequest.notcompl? %> 
    <= link_to 'Edit', edit_worequest_path(@worequest), :class => 'btn btn-success' %> 
<% end %> 

什麼是正確的語法?

感謝您的幫助!

回答

1

範圍將查找所有滿足您的條件的記錄。

看起來你想要做的是檢查worequest是否有statuscode_idStatuscode.last.id。你需要的是你的類,而不是一個範圍的實例方法:

class Worequest < ActiveRecord::Base 

    def not_complete? 
     statuscode != Statuscode.last.id 
    end 
end 

然後在您的視圖中,可以檢查Worequest是否完成:

<% if @worequest.not_complete? %> 
    <= link_to 'Edit', edit_worequest_path(@worequest), :class => 'btn btn-success' %> 
<% end %> 

此外,定義範圍創建一個與範圍名稱相同的方法。因此,調用.notcompl與調用.notcompl?不同 - 它解釋了您遇到的未定義方法問題。

+0

我也試過@ worequest.notcompl – Reddirt 2013-04-30 14:17:27

+0

謝謝 - def工作! – Reddirt 2013-04-30 14:22:40

0

作用域屬於模型,不屬於控制器。將它移動到Worequest,它應該工作。

+0

對不起,它在模型中。我糾正了問題。 – Reddirt 2013-04-30 14:15:02

0

doc

範圍:添加用於檢索和查詢對象類方法

問題是,您正在調用notcompl方法的實例不在類中。 Worequest.notcompl應該工作(不在同一個例子中)。

PS:請參閱@alexBrand答案。