【问题标题】:Ruby on Rails simple dropdown does not retain value on a page refresh using cookiesRuby on Rails 简单下拉菜单不会在使用 cookie 刷新页面时保留值
【发布时间】:2018-09-30 15:26:33
【问题描述】:

我有一个非常简单的下拉菜单,用于选择我希望我的页面显示的货币。但是,每当我更改货币然后刷新页面时,选定的选项就会变回美元(默认值)。我尝试使用 cookie,但它不起作用。

这是我的 HTML,它只是一个在我的控制器中调用方法的表单:

<%= form_tag "/cryptos/currency_selector" do %>  
            <%= select_tag(cookies[:currency_symbol], options_for_select([['USD'], ['JPY'], ['AUD'], ['EUR'], ['GBP'], ['CHF']], params[:currency_symbol]), :onchange => "this.form.submit();") %>
          <% end %>

仅打印出用于测试的 cookie 值的控制器代码:

#handles currency conversion dropdown selector
def currency_selector
 puts cookies[:currency_symbol]
end

它甚至没有设置我的 cookie,因为我在终端中得到了一个空字符串。任何帮助将不胜感激!

【问题讨论】:

    标签: html ruby-on-rails ruby forms cookies


    【解决方案1】:

    首先是页面上的表单:

    <%= form_tag "/cryptos/currency_selector" do %>  
        <%= select_tag(:currency_symbol, 
            options_for_select(
              ['USD', 'JPY', 'AUD', 'EUR', 'GBP', 'CHF'], cookies[:selected_currency]
            ), 
            onchange: "this.form.submit();") %>
    <% end %>
    

    /cryptos/currency_selector 指向的控制器方法中:

      def currency_selector
        cookies[:selected_currency] = params[:currency_symbol]
    
        redirect_back fallback_location: root_url
      end
    

    您可能会考虑的进一步改进:

    • 将可用货币列表移动到模型或至少一个常量中。
    • 在您的routes.rb 中为/cryptos/currency_selector 路径命名,并在您的表单中使用该名称而不是硬编码路径。

    【讨论】:

    • 像魅力一样工作。也感谢您的建议!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2012-03-23
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多