我是rails的新手,并且有点挑战:我有一个带有“status”列的模型,可以是0或1.在索引视图中,我想要一个直接链接来改变状态0比1,这个我能做到的。我想做的是询问状态更改的原因(文本提交),并将该文本作为参数发送到相应的操作。
有人能指出我正确的方向如何做到这一点? 谢谢!
答案 0 :(得分:1)
您可以使用form_tag作为相同的单选按钮,输入0或1,输出文本字段
答案 1 :(得分:1)
如果我理解正确,您的问题是“如何传递表单数据和链接”?
虽然你不能在html实现方面严格执行此操作,但如果你这样做,有几种方法可以让它看起来。
最简单的方法可能是使用表单,然后将按钮设置为链接。这样做的好处是它不需要任何javascript。
您首先要设置一个表单:
<%= form_tag my_action_path do %>
<%= text_field_tag :reason %>
<%= submit_tag 'Do it', class: 'submit' %>
<% end
然后,您相应地设置输入样式:
.submit { border: 0 none; background: none; text-decoration: underline; cursor: pointer; }
.submit:hover { text-decoration: none; }
此实现将触发POST请求,这可能是您应该使用的,因为该操作意味着用户编写的内容而不是读取它(如果您更喜欢GET请求,您仍然可以传递method: :get
。)
您还可以在链接上挂钩点击事件并更改网址以包含输入内容。提供以下html:
<%= text_field_tag :reason %>
<%= link_to 'do it', my_action_path %>
您可以在javascript中执行此操作:
$('a').click(function(event){
event.preventDefault(); # prevent link to be followed
# compute an url adding the input content
var new_url = $(this).attr('url') + '&?reason=' + $('input').val();
# redirect user to that url
window.location.href = new_url;
});
我不是很喜欢这个解决方案,因为你可能有url编码/长度问题,并且在表单外添加输入是无效的html。如果您添加表单,那么您还必须处理它的提交事件(因为在文本字段中按“return / enter”键将提交其表单)。
您还可以使用常规表单,然后在点击链接时触发其提交:
<%= form_tag my_action_path do %>
<%= text_field_tag :reason %>
<%= link_to 'Do it', my_action_path %>
<% end %>
在这里,javascript会是这样的:
$('a').click(function(event){
event.preventDefault(); # do not follow link
$('form').submit(); # submit form instead
});