0

我是 Rails 新手,有点遇到挑战:我有一个带有“状态”列的模型,它可以是 0 或 1。在索引视图中,我想放置一个直接链接以将状态从 0 更改为 1 ,这个我能做到。我想做的是询问状态更改的原因(文本文件),并将该文本作为参数发送给相应的操作。

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

4

2 回答 2

1

您可以将 form_tag 用于相同,单选按钮用于 0 或 1,并使用文本字段作为原因

于 2013-11-05T10:40:57.183 回答
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 请求,这可能是您应该使用的,因为该操作意味着用户编写而不是读取它(method: :get如果您更喜欢 GET 请求,您仍然可以通过)。

添加输入数据作为查询字符串

您还可以在链接上挂钩单击事件并更改 url 以包含输入的内容。提供以下 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
});
于 2013-11-05T11:46:53.137 回答