2013-04-30 24 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答案。