rails:提交时的表单应转到包含两个下拉菜单值的自定义URL

时间:2013-09-28 09:38:20

标签: javascript jquery ruby-on-rails ruby-on-rails-4 rails-routing

我从下拉菜单中获取两个值来制作自定义网址时遇到一些问题。 我正在尝试使用jquery。这两个值的ID为

#convertor_from_currency
#convertor_to_currency

jquery的:

<script>
    $(document).ready(function(){
        $("#currency_form").submit(function(e){
            e.preventDefault();
            var from = $('#convertor_from_currency').val();
            var to = $('#convertor_to_currency').val();
            var url_end = from + "-" + to;
            var url = $('#currency_form').attr('action') + '/' + url_end;
            $('#currency_form').attr('action', url);
            $('#currency_form').submit();
            //alert(url);
        });
 </script>

,这是形式的标记:

<%= form_for :convertor , :html => {:id => "currency_form"}, :url => {:controller => "converter", :action => "show" } do |f| %>
    <%= f.label :from_currency %>
    <%= f.select :from_currency, options_for_select(currencies,  @from_cur)  %>

    <%= f.label :to_currency %>
    <%= f.select :to_currency, options_for_select(currencies,  @to_cur), :required => true %>
    <%= f.submit "Calculate", class: "btn btn-large btn-primary", id: "submitButton" %> 
<% end %>

路由

root 'converter#index'
# get "converter/show"
match '/currencies/', to: 'converter#show',   via: [:post]

提交时我希望网址为:

'/currencies/url_end

其中“url_end”是表单中提交的值的串联:

 #convertor_from_currency
    #convertor_to_currency

已更新,这是我的控制器。

class ConverterController < ApplicationController
  def index
  end

  def show
     @amount = params[:convertor][:amount]
     @from_cur = params[:convertor][:from_currency]
     @to_cur = params[:convertor][:to_currency]

     @result = ConverterHelper.show(@from_cur, @to_cur, @amount)
  end
end

我该怎么做? 任何想法将被赞赏,即使它使用除jquery / javascript以外的其他方式

2 个答案:

答案 0 :(得分:1)

您可以尝试重写此路线:

match '/currencies/', to: 'converter#show',   via: [:post]

为:

match '/currencies/:from-:to', to: 'converter#show',   via: [:post]

在这种情况下,对(例如)/ currency / usd-eur的请求将被路由到转换器#show,您将能够使用params [from]和params [:to]访问控制器操作中的货币。

<强>更新

  1. javascript代码出错:
  2. 此代码应该按预期工作:

    <script>
    $(document).ready(function(){
        $("#currency_form").submit(function(e){
            var from = $('#convertor_from_currency').val();
            var to = $('#convertor_to_currency').val();
            var url_end = from + "-" + to;
            var url = $('#currency_form').attr('action') + '/' + url_end;
    
            $.post(url, $('#currency_form').serialize(), function(data){alert('success');});
            alert(url);
            e.preventDefault();
            return false;
        });
      });
     </script>
    

    只要您在提交处理程序内,就不应该在表单上调用submit。相反,您应该使用$ .post(...)来提交表单数据。表格数据可以像我的例子一样被序列化,以便与$ .post()一起发送。你应该添加“});”在关闭标签之前。

    1. 适用于您的路由配置之一:

      匹配'/--币/'=&gt; 'converter #index',如:转换器 匹配'/--币/:from-:到'=&gt; '转换器#show',来自:[:post]

      您的表单应使用converter_path帮助程序作为操作URL。 JS代码应该将表单提交到/ currency /:from-:to。

    2. 您需要将视图中的表单更新为:

       {:id =&gt; “currency_form”},:url =&gt; converter_path do | f | %GT;
    3. 您可以在控制器中使用此示例代码,以确保正确提交表单:

      def show   @amount = params [:convertor] [:amount]   @from_cur = params [:convertor] [:from_currency]   @to_cur = params [:convertor] [:to_currency]

      #@ result = ConverterHelper.show(@ from_cur,@ to_cur,@ amount)   渲染文字:“文字” 端

    4. 一旦看到表单在服务器上正确处理,您就可以取消注释该行并删除渲染。

答案 1 :(得分:1)

这可以帮助(它对我有用)

<script>
$(document).ready(function(e){
    $("#currency_form").submit(function(){
        var from = $('#convertor_from_currency').val();
        var to = $('#convertor_to_currency').val();
        var url_end = from + "-" + to;
        var url = $('#currency_form').attr('action') + '/' + url_end;
        $('form#currency_form').attr('action', url);
        // window.location.href = url
        e.preventDefault();
        alert(url);
        return false;
    });
  });
 </script>

您可以(取消)发表评论,使其按照您的问题运作

不要忘记你的路线

  root 'converter#index'
  match '/currencies/', to: 'converter#show',   via: [:post]
  post '/currencies/:url' => 'converter#show'  

然后upvote !!!!