3

私は次のapplication_controllerメソッドを持っています:

  def current_account
    @current_account ||= Account.find_by_subdomain(request.subdomain)
  end

before_filterまたはhelper_methodを使用して呼び出す必要がありますか?この2つの違いは何ですか?この場合のトレードオフに関して何を考慮する必要がありますか?

ありがとう。

より明確にするための更新

ビューからコントローラー定義のメソッドを呼び出すことができるという点で、のbefore_filter代わりにユーザーを使用できることがわかりました。helper_methodおそらくそれは私が自分のコードをどのように配置したかということなので、これが私が持っているものです:

controllers / application_controller.rb

class ApplicationController < ActionController::Base

  protect_from_forgery

  include SessionsHelper

  before_filter :current_account
  helper_method :current_user

end

helpers / sessions_helper.rb

module SessionsHelper

  private

  def current_account
    @current_account ||= Account.find_by_subdomain(request.subdomain)
  end

  def current_user
    @current_user ||= User.find(session[:user_id]) if session[:user_id]
  end

  def logged_in?
    if current_user
      return true
    else
      return false
    end
  end
end

controllers /spaces_controller.rb

class SpacesController < ApplicationController

  def home
    unless logged_in?
      redirect_to login_path
    end
  end
end

ビュー/スペース/home.html.erb

<%= current_account.inspect %>

理論的には、これは機能しないはずですよね?

4

3 に答える 3

4

before_filterとhelper_methodの使用には関係がありません。ビューで再利用したいメソッドがコントローラーにある場合は、ヘルパーメソッドを使用する必要があります。ビューで使用する必要がある場合は、このcurrent_accountがhelper_methodの良い例になる可能性があります。

于 2012-04-06T02:13:41.213 に答える
3

それらは2つの非常に異なるものです。Aは、アクションが開始する前に一度before_filter呼び出されるものです。一方、ヘルパーメソッドは、通常はビュー内で頻繁に繰り返されます。

あなたが持っているその方法は、それがどこにあるかを維持するのにちょうど良いです。

于 2012-04-06T02:14:09.130 に答える
1

私は自分の問題を解決しました。Railsは初めてですが、helpersディレクトリで定義されたメソッドが自動的にhelper_methodsになることを知りませんでした。今、私はこれがメモリ/パフォーマンスにどのように影響するのか疑問に思っています。しかし、少なくとも私は謎を解きました。皆さんの助けに感謝します!

于 2012-04-06T03:10:58.300 に答える