Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 在哪里设置会话默认值?_Ruby On Rails 3_Session - Fatal编程技术网

Ruby on rails 3 在哪里设置会话默认值?

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’}%> 但当我直接加载到内部页

伙计们! 在询问之前,我应该提到,我在工作时没有ActiveRecord或任何自托管数据库。这就是为什么我必须在会话中存储一些值

从一开始,我就决定在布局中设置用户城市的会话值。-我想它会比其他东西先装好。所以我做了这样的事情:

<% 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,那么您可能需要使用更多的会话来存储和检索值,这会有所帮助。否则,如果您的需求只是存储和检索一个或两个值,那么这可能是一种过激行为。请做出选择。