假设你有一个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你可以使用一个常量