使用select_tag

时间:2017-08-06 21:50:42

标签: ruby-on-rails ruby

我有一个select_tag,如下所示:

<%= form_tag orders_path do %>               
           <script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
            data-key="<%= Rails.configuration.stripe[:publishable_key] %>"
            data-label="Pay by CB"
            data-email="<%= current_user.email %>"
            data-name="Order"
            data-locale=auto>
          </script>
   <!-- url question -->
      <div class="widthfull">
        <p class="question">What's the URL ?</p>
        <div class="widthfull"><%= text_area_tag(:url, "", class: "answer textarea widthfull calcul_checkout", rows:"1") %></div>
      </div>
   <!-- language_ov question -->
     <div> 
      <p class="question">
      What's the language of the video ?
      </p> 
     <div class="flex"> 
      <span class="answer language_ov">></span> 
      <span>
       <%= select_tag(:language_ov, 
         options_for_select([['Français', 'FR'],['Anglais', 'EN']]), 
         class:"answer language_ov calcul_checkout chosen-select")%>
      </span> 
     </div> 
   </div> 
<% end %>

但如果我的用户不重新选择默认选项params[:language_ov]等于nil

我想提供默认值&#39; FR&#39;如果我的用户没有选择任何内容,则为params[:language_ov]

这里是模型验证Request.rb

class Request < ApplicationRecord
  belongs_to :user
  belongs_to :order
end

我在控制器中使用参数

.. @request = Request.new(language_ov: params[:language_ov], language_request: language, export_option: params[:export_option]||'no') ..

这里是服务器日志(没有用于language_ov的参数):

Started POST "/orders" for ::1 at 2017-08-07 22:20:22 +0200 Processing by OrdersController#create as HTML'   
Parameters: {"utf8"=>"✓", "authenticity_token"=>"*************",
"url"=>"www.url.com",
 "video_title"=>"Project name",
 "lengthminutes"=>["6"], "lengthsecondes"=>[""],
 "language_request"=>["EN"],
 "project_comment"=>"",
 "stripeToken"=>"************",
 "stripeTokenType"=>"card",
 "stripeEmail"=>"testemail@gmail.com"}

显然,select_tag不支持所选选项。我应该使用select methode吗?你能帮我把select_tag转换成select吗?

1 个答案:

答案 0 :(得分:0)

我发现了问题。如果用户之前已经开始填写表单,我有一个javascript来预填表单。我使用localStorage变量存储数据。因此,当用户到达页面时,我检查localStorage是否存在。这就是问题所在,因为它每次都会重写所选值。我添加一个条件来执行这一行(并且它正在工作)。我会找到另一种解决方案来保存表单并在用户回来时预先填写表单。 $("#language_request").val(localStorage.language_request);