0

假设您有一个 facebook 应用程序 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 

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

4

2 回答 2

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
于 2013-01-02T20:15:39.460 回答
0

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

于 2013-01-02T20:14:58.323 回答