如何使变量可用于每个Rails操作的结果?



假设你有一个facebook app id的配置变量定义为:

TestSiteRails::Application.configure do
  config.facebook_app_id = '123146123188122'
end

您希望该变量在每个操作中都可用,以便它在主布局application.html.haml:

中可用。
!!! html
%html
  %head
  %body
    #fb-root
    :javascript
      window.fbAsyncInit = function() {
        // init the FB JS SDK
        FB.init({
          appId      : '#{@facebook_app_id}', // Configured facebook app id
          channelUrl : '//WWW.YOUR_DOMAIN.COM/channel.html', // Channel File for x-domain communication
          status     : true, // check the login status upon init?
          cookie     : true, // set sessions cookies to allow your server to access the session?
          xfbml      : true  // parse XFBML tags on this page?
        });
    = yield :contents 

与其在每个控制器动作中重复代码来执行此操作,不如如何使每个动作都可以使用此操作?

你可以把它放到你的ApplicationController中,这样所有的控制器都可以继承它:

class ApplicationController
  before_filter :set_facebook_app_id
  private
  def set_facebook_app_id
    @facebook_app_id ||= Rails.configuration.facebook_app_id
  end
end

或者,如果你需要它也可以被视图访问,作为一个辅助方法:

class ApplicationController
  def facebook_app_id
    Rails.configuration.facebook_app_id
  end
  helper_method :facebook_app_id
end

你可以在application_controller中使用before_filter但我认为如果你想用它来获得一个常量id你可以使用一个常量

相关内容

  • 没有找到相关文章

最新更新