导轨|根据用户选择设置cookie

时间:2018-06-08 09:52:21

标签: ruby-on-rails cookies storage

我想将用户选择的值存储在rails中的cookie上。

因此会有2个链接作为货币,例如;欧元和美元。当用户选择/单击其中一个链接时,它应该更新cookies[:curr]。然后,操作应使用redirect_to :back

刷新页面

我的问题是,我想将此选项添加到页脚。因此,用户可以在网站上的任何位置访问此选项。但是,当用户在主页或任何其他控制器上选择时,如何更改cookies[:curr]值?

我将以下函数放到应用程序控制器中以检查cookies[:curr]

的值
def return_currency
      if cookies[:curr].blank? || cookies[:curr].nil?
        '€' #default
      elsif cookies[:curr] == 'USD'
        '$'
   end
end

所以在这里,我可以检查值,但是,我无法弄清楚如何分配用户选择的值。它应该是form_for吗?但是我只能将数据发送到1个控制器,但我希望用户可以访问任何操作,因为它将位于页脚。

谢谢

1 个答案:

答案 0 :(得分:3)

表单可能是合理的,因为它允许您使用选择,单选按钮或其他字段类型来更新货币。

但是,您可以通过使用一些链接(例如以下内容)来实现此目的。

在视图中:

<%= link_to '€', your_currency_update_path(curr: '€') %>

在控制器中:

def your_currency_update_action
  cookies[:curr] = params[:curr]
  redirect_to :back
end

点击此链接会点击控制器传递params[:curr]并将用户重定向到他们的位置。

或者使用这样的表格:

<%= form_tag(your_currency_update_path, method: :post) do %>
  <%= select_tag :curr, options_for_select([['€'], ['$']) %>
  <%= submit_tag "Update Currency" %>
<% end %>

最后,您可以使用以下内容自动提交表单的提交按钮:

<%= select_tag :curr, options_for_select([['€'], ['$']) %>, onchange: "this.form.submit();" %>

提交此链接/表单的页面无关紧要,因为它会在重定向之前始终点击您选择处理此操作的控制器操作。

希望有所帮助 - 让我知道你是如何进行的,或者如果你有任何问题。