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

时间:2013-01-02 20:04:57

标签: ruby-on-rails facebook ruby-on-rails-3

假设您有一个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 

不是在每个控制器操作中重复代码来执行此操作,而是如何将其用于每个操作?

2 个答案:

答案 0 :(得分:1)

您可以将它放入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

答案 1 :(得分:0)

您可以在application_controller中使用before_filter,但我认为如果您要使用它来获得常量ID,则可以使用常量。