如何在会话中存储变量?

时间:2019-11-16 02:44:49

标签: ruby-on-rails ruby session session-variables

我正在使用的应用程序由每个用户可以拥有多个配置文件的用户组成(应该像一个“家庭帐户”)。用户登录后,可以选择他们要使用的配置文件。

我将此信息保存在类变量中,但不起作用。如果用户从另一个浏览器登录或设计并选择另一个配置文件,则到处都会更改。这个想法是让不同的人访问同一个帐户并能够选择不同的个人资料,而无需更改为其他个人资料。

我进行了研究,发现应该将其保存在一个会话中,但是我不知道该怎么做。我还想知道如果将其保存在会话中,该如何修改它以及如何从控制器和/或视图中访问它。

配置文件具有:“ user_id”(该配置文件的所有者用户)和“名称”(由用户在创建配置文件时决定)。

我不知道这是否有帮助,但我使用的是宝石“ Devise”。如果需要其他信息,请告诉我,以便我立即编辑帖子。

我正在共享下面的代码,以便您可以看到到目前为止我所做的事情:

application_controller.rb

    @@current_profile = nil

    def set_current_profile
        @@current_profile = Profile.find(params[:id])
        puts "#{@@current_profile.name}" # debug
    end

    def return_current_profile
        return @@current_profile
    end

profile_controller.rb

    def set_current_profile
        super 
        redirect_to main_main_page_path
    end

    def return_current_profile
        super
    end

    helper_method :return_current_profile

profile_select.html.erb

  <div class="container">
      <div class="list-group col-md-4 offset-md-4" align="center">
          <% @profiles.all.each do |profile| %>
              <%= link_to profile.name, profile, method: :set_current_profile, class: "list-group-item list-group-item-action" %> 
          <% end %>
      </div>
  </div>

routes.rb

   post 'profiles/:id', to: 'profiles#set_current_profile', as: :set_current_profile

谢谢。

1 个答案:

答案 0 :(得分:2)

在rails中,您可以创建新的会话并像这样获取会话:

# set the session
session[:key] = 'value'

# get the session
session[:key] #=> 'value'

如果要在会话中保存数组,可以这样:

# save the ids 
session[:available_user_ids] = available_user_ids.join(',')

# get the ids
session[:available_user_ids].split(',') #> [1,2,3]