0

我在 wearquests 模型中有一个范围:

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

如果穿着任务不完整,我只想在穿着任务显示页面中显示编辑按钮。我试过这个并得到未定义的方法:

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

什么是正确的语法?

谢谢您的帮助!

4

3 回答 3

1

范围将找到满足您条件的所有记录。

看起来你想要做的是检查是否worequeststatuscode_id. Statuscode.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?- 这解释了您遇到的未定义方法问题。

于 2013-04-30T14:08:44.023 回答
0

范围属于模型,而不是控制器。将它移到Worequest它应该可以工作。

于 2013-04-30T14:09:50.640 回答
0

来自文档

范围:添加一个类方法用于检索和查询对象。

问题是您notcompl在不在类中的实例中调用该方法。Worequest.notcompl应该工作(不在同一个例子中)。

PS:见@alexBrand 回答。

于 2013-04-30T14:18:09.540 回答