我正在尝试将用户重定向到路由:/: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 %>
答案 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()
我认为你所遇到的问题主要与上述两点有关,虽然我不太确定你的目标是什么,如果它含糊不清,那就很抱歉。