0

私は wearquests モデルにスコープを持っています:

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

wearquests が完了していない場合にのみ、worequests 表示ページに編集ボタンを表示したいと思います。これを試してみたところ、未定義のメソッドが得られました:

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

正しい構文は何ですか?

助けてくれてありがとう!

4

3 に答える 3

1

スコープは、条件を満たすすべてのレコードを検索します。

あなたがしたいことworequestは、 に of があるstatuscode_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

ドキュメントから:

スコープ:オブジェクトを取得およびクエリするためのクラス メソッドを追加します。

notcompl問題は、クラスではなくインスタンスでメソッドを呼び出していることです。Worequest.notcompl動作するはずです (同じ例ではありません)。

PS: @alexBrand の回答を参照してください。

于 2013-04-30T14:18:09.540 に答える
0

スコープは、コントローラーではなくモデルに属します。に移動するとWorequest、動作するはずです。

于 2013-04-30T14:09:50.640 に答える