3

我需要根据货币和两种货币的两个下拉输入生成一个 url,这样当用户单击提交按钮时,生成的 url 应该类似于http://localhost:3000/currencies/usd-eur表单货币为 usd 和 to_currency 为 eur 时的样子。

这是我的观点(index.html.erb)

 <%= semantic_form_for :calculator, :url => {:controller => "conversions", :action => "calculate" }  do |f| %>
      <p><%= f.label :amount %>
      <%= f.text_field :amount %></p>
      <p><%= f.label :from_currency %>
      <%= select :calculator, :from_currency, Choices['from_currency'] %></p>
      </p><%= f.label :to_currency %>
      <%= select :calculator, :to_currency, Choices['to_currency'] %></p>
       <p><%= f.submit "Calculate" %></p>
<%= end %>

路线.rb

match 'currencies', to: 'conversions#index', via: :get
match 'currencies/convert', to: 'conversions#calculate', as: :calculate, via: :post

控制器(conversions_controller.rb)

def index
 end

 def calculate
  @amount = params[:calculator][:amount]
  @from_cur = params[:calculator][:from_currency]
  @to_cur = params[:calculator][:to_currency]
  @result = ConversionsHelper.calculate(@from_cur, @to_cur, @amount)
 end

我没有任何模型,因为我从谷歌 API 获取数据,因此我可能会超出 RESFFUL 约定的范围。一个详细的答案将不胜感激。谢谢。

4

4 回答 4

3

这个javascript代码最终解决了我的问题。

  $(document).ready(function(){
        $('#Cal').attr('action', '/currencies');
        $("#Cal").submit(function(e){            
            var from = $('#calculator_from_currency').val().toLowerCase();
            var to = $('#calculator_to_currency').val().toLowerCase();
            var url_end = from + "-" + to;
            var url = $('#Cal').attr('action') + '/' + url_end;
            $('#Cal').attr('action', url);            
        });
    });

然后我在我的路线中添加了这条线。

  post '/currencies/:url' => 'conversions#calculate', via: [:post]
于 2013-10-01T06:29:48.870 回答
1

尝试使用 jquery,从表单中选择您的值。然后设置网址

 $('form#currency_form').attr('action', url);

在你的表格里

更新

在您的路线文件中使用以下路线:

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

我希望这会有所帮助。

于 2013-10-01T06:24:28.410 回答
0

Ahh like mu is too shor said sorry 我做了一个嘘声

改变

"/currencies/#{$(#id_of_from_currency option:selected).val()}-#{$(#id_of_to_currencyoption:selected).val()}"

"/currencies/#{$('#id_of_from_currency option:selected').val()}-#{$('#id_of_to_currency option:selected').val()}"

注意 $() 中的 ''

于 2013-09-30T16:03:12.537 回答
0

你的目标有点超出了 restfull 和 rails 的约定。您最终应该学习这些,因为它们是由长期从事此工作的人开发的,它们将使您的生活更轻松。看起来你只是玩得很​​开心,所以这里有一些咖啡脚本可以完成这项工作。

jQuery ->
  currency_convert_path = ->
    "/currencies/#{$(#id_of_from_currency option:selected).val()}-#{$(#id_of_to_currency option:selected).val()}"

  %("#id_of_from_currency #id_of_to_currency").blur( ->
    $("#id_of_form").attr('action', currency_convert_path())
  )

您将需要检查表单上的元素并将 id_of_from_currency id_of_form 和 id_of_to_currency 填写到实际 ID。然后,当您更改选择时,您可以在提交之前检查表单并查看您的新操作。

我还假设选项标签的值的格式类似于 usd 和 eur。如果不是,您将需要更改它们以使上述代码具有预期的效果。

于 2013-09-28T02:42:27.733 回答