我做的事情类似于 gon,但更加简单。我在我的ApplicationController
中实现了以下内容。
def javascript_variables(variables)
@javascript_variables ||= {}
@javascript_variables.merge!(variables)
end
在控制器操作中,我可以像这样执行某些操作:
def some_action
javascript_variables(user: current_user)
end
在我的
ApplicationHelper
中,我有类似以下的代码。
def javascript_variables(variables = nil)
@javascript_variables ||= {}
@javascript_variables.merge!(variables) and return if !variables.nil?
output = ''
padding = @javascript_variables.keys.group_by(&:size).max.first
@javascript_variables.each do |variable, value|
output << "#{variable.to_s.ljust(padding)} = #{value.to_json},\n "
end
raw "var " + output.strip.html_safe.gsub(/\,\Z/m, ';')
end
最后,在我的布局的
<head>
中,我有以下内容。
<script>
<%= javascript_variables %>
</script>
这使我得到了像这样的东西
(来自我的应用程序中的真实例子)。
<script>
var pageModule = "site/index",
isCustomer = false,
utype = "normal",
isAnonymous = true,
keyboardShortcuts = false,
pubnub = null,
requestToken = "3zj974w074ftria3j";
</script>