0

承認されていないユーザーがページにアクセスするのを防ぐために、before フィルターを使用しようとしています。

承認されていないユーザーをチェックするために、/lib フォルダーの .rb ファイルで定義されたメソッドがあります (さまざまなコントローラーとビューにあるメソッドがいくつかあります)。メソッドは check_user_for_current_approval(user_id) です。

私のコントローラーでは、次のバリエーションを試しました (私は RubyMine を IDE として使用していますが、構文エラーがあることを示すものではありませんでした):

before_filter(:only => [:new]) do |c|
    c.check_user_for_current_approval current_user.id
end

次のエラーメッセージが表示されました。

NoMethodError in PaymentsController#new

private method `check_user_for_current_approval' called for #<PaymentsController:0x007ff06784f148>

次の構文:

before_filter(:only => [:new]) do |c|
    c.send (:check_user_for_current_approval, current_user.id)
end

次のエラーが発生します。

SyntaxError in PaymentsController#new

/app/controllers/payments_controller.rb:9: syntax error, unexpected ',', expecting ')'
c.send (:check_user_for_current_approval, current_user.id)
                                         ^
/app/controllers/payments_controller.rb:9: syntax error, unexpected ')', expecting keyword_end
/app/controllers/payments_controller.rb:130: syntax error, unexpected $end, expecting keyword_end

次の構文を使用します。

before_filter(:only => [:new]) { check_user_for_current_approval(current_user.id) }

ページに直接移動します (フィルターは効果がありません)。さまざまなステートメントは、StackOverflow で見た回答からのものです。

4

2 に答える 2

1

最初の方法を使用しますが、check_user_for_current_approval公開します。

また:

before_filter共有は、libファイルよりもアプリケーションコントローラーの方が適していると思います。これにより、通常は他のすべてのコントローラーが行う、アプリケーションコントローラーを拡張するすべてのコントローラーがアクセスできるようになります。

于 2012-10-25T16:23:25.830 に答える
0

呼び出されるメソッドを定義するためにシンボルを使用しないのはなぜですか?

例 PaymentsController:

before_filter :check_user_for_current_approval, :only => :new

def check_user_for_current_approval; raise "Called"; end
于 2012-10-25T16:22:20.353 に答える