Ruby on rails 3 在哪里设置会话默认值?
伙计们! 在询问之前,我应该提到,我在工作时没有ActiveRecord或任何自托管数据库。这就是为什么我必须在会话中存储一些值 从一开始,我就决定在布局中设置用户城市的会话值。-我想它会比其他东西先装好。所以我做了这样的事情:Ruby on rails 3 在哪里设置会话默认值?,ruby-on-rails-3,session,Ruby On Rails 3,Session,伙计们! 在询问之前,我应该提到,我在工作时没有ActiveRecord或任何自托管数据库。这就是为什么我必须在会话中存储一些值 从一开始,我就决定在布局中设置用户城市的会话值。-我想它会比其他东西先装好。所以我做了这样的事情: <% session[:city] ||= {:name => 'City-Name', :lat => '40', :lng => '40'}%> ‘城市名称’,:lat=>‘40’,:lng=>‘40’}%> 但当我直接加载到内部页
<% session[:city] ||= {:name => 'City-Name', :lat => '40', :lng => '40'}%>
‘城市名称’,:lat=>‘40’,:lng=>‘40’}%>
但当我直接加载到内部页面时,会出现session[:city为零*(
我应该如何设置会话,使其不为零?我在一个应用程序中有类似的需求。它需要在登录时加载用户数据并存储在会话中。因此,编写了一个名为session\u helpers.rb的模块,其中包含以下内容:
module SessionHelpers
def get_value(key)
session[key.to_sym]
end
protected
def store_data(*objects)
objects.each do |object|
if object.is_a?(Hash)
object.each do |key, value|
session[key.to_sym] = value
end
end
end
end
def remove_data(*objects)
objects.each do |object|
if object.is_a?(String)
key = to_id(object)
else
key = to_id(object.class.name)
end
session[key] = nil
end
end
def update_data(key, value)
session[key.to_sym] = value
end
private
def to_id(name)
"#{name.parameterize('_').foreign_key}".to_sym
end
end
您还可以使任何或所有方法对视图可用:
# application_controller.rb
helper_method :get_value
从模型中,我将检索会话中需要设置的关于用户的数据散列:
def common_data
@data = Hash.new
@data.merge!( { 'news' => self.news.count } )
...
@data
end
由于我想在登录后执行此操作,因此我否决了Desive方法:
def after_sign_in_path_for(resource_or_scope)
store_data( '_count', current_user.common_data )
dashboard_path
end
通过这种方式,我可以在登录时加载有关用户的重要数据,并将其存储在会话中,并随时检索。希望这能有所帮助。Wow,我只需要为每个新用户设置一个会话变量,无论他是否登录?它是否有效?是的。它将使用store_data('varname',value)因此,我应该在布局中放置store_数据,以检查是否设置了默认值,而不是会话[:key]| |=值???存储|u数据是将数据放入会话。在应用程序|u控制器中提出一个before|u过滤器,以设置会话的初始默认值。并且,在需要时更新这些值。答案旨在帮助您提出一个在不同情况下可重用的更整洁的API。如果您不使用AR,那么您可能需要使用更多的会话来存储和检索值,这会有所帮助。否则,如果您的需求只是存储和检索一个或两个值,那么这可能是一种过激行为。请做出选择。