Rails内联文本字段到操作

时间:2013-11-05 10:24:11

标签: ruby-on-rails forms inline

我是rails的新手,并且有点挑战:我有一个带有“status”列的模型,可以是0或1.在索引视图中,我想要一个直接链接来改变状态0比1,这个我能做到的。我想做的是询问状态更改的原因(文本提交),并将该文本作为参数发送到相应的操作。

有人能指出我正确的方向如何做到这一点? 谢谢!

2 个答案:

答案 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; }

See it running

此实现将触发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
});