单输入表单提交GET到/ route /:属性

时间:2013-11-25 17:28:32

标签: javascript jquery forms coffeescript ruby-on-rails-4

我正在尝试将用户重定向到路由:/:singular。表单本身只有一个id为“singular”的字段和一个按钮。我曾尝试使用CoffeeScript和JS,但这似乎不太正常,因为我必须从表单标记中获取输入,因为它会提交并且会有/?singular,所以如果你按{{ 1}}什么也没发生,这不是我想要的。

enter

这是我正在尝试的coffeescript:

<div class = "form">
  <%= text_field_tag :singular, params[:singular], name: nil %>
  <%= submit_tag "Pluralize!", name: nil, id: 'pluralize' %>
</div>

<% if @plural %>
  <div class = "plural">
    <%= "#{@plural} is the plural of #{@singular}" %>
  </div>  
<% end %>

1 个答案:

答案 0 :(得分:2)

我不太确定你的目标是什么,但我认为你将面临的问题是......

混合标准html表单和RESTFul访问

我的意思是你使用的是html表单组件,它们有自己的序列化行为和javascript,这是你自己的处理输入值的自定义方式,对着你的rails路由需要一个非常简单的变量。

当您在Rails中有路由,例如/:myvar时,rails将匹配路由并在/之后输入params哈希值,然后调用相应的控制器操作在上面。当您提交普通的html表单时,它会序列化它的内容并格式化网址,如/?myvar=val。您在提交表单时看到的是表单自动尝试获取singular值并将其作为参数发送到网址中。显然,当您发送/[value]时,rails会期待一个简单的广告/?myvar=[value]网址。做出决定并做出决定。

不阻止默认操作

您可能正在填写的下一部分是您的表单提交按钮,即使您附加了javascript,也会继续提交。当您单击该按钮时,您需要明确声明您不希望允许浏览器完成组件的默认行为(即,对于锚点,转到href链接)。

$ ->
  $('#pluralize').click (e) ->
    e.preventDefault()
    document.location.href = "/" + $('#singular').val()

我认为你所遇到的问题主要与上述两点有关,虽然我不太确定你的目标是什么,如果它含糊不清,那就很抱歉。