Rails |根据用户选择设置cookie

Rails | Setting cookies according to user selection

我想将用户选择的值存储在 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 个控制器,但我希望用户可以访问页脚处的任何操作。

谢谢

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

但是,您可以通过使用一些 link 非常简单地实现此目的,例如以下内容。

在视图中:

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

在控制器中:

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

单击此 link 将点击控制器并传递 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();" %>

这个 link/ 表单是从哪个页面提交的并不重要,因为它总是会触发您选择处理此问题的控制器操作,然后再重定向回来。

希望对您有所帮助 - 如果您有任何问题,请告诉我您的情况。