Rails 4 button_to使用帮助程序不正确的重定向

时间:2014-11-18 12:33:33

标签: button ruby-on-rails-4 indexing

我正在为我的一个模型构建索引。而不是通常的表,我想有两个组合框:一个用于选择对象,另一个用于选择方法(编辑或销毁)。单击提交按钮后,我应该被重定向到适当的方法引用(例如admin_users / 1 / edit或admin_users / 17 / destroy)。我编写了一个构建url引用的帮助器,但由于某种原因它不起作用。当我使用button_to时,我被重定向到create方法,当我使用button_tag时无效。有什么想法吗?

查看代码:

<%= form_tag do %>
    <p id="notice"><%= flash[:notice] %></p>
    <h1>Listing admin_users</h1>
    <p><strong>select admin user</strong></p>
    <%= select_tag(@req_id, options_from_collection_for_select(@admin_users, :id, :login)) %>
    <br/>
    <p><strong>select action</strong></p>
    <%= select_tag(@oper, options_for_select([['edit'],['destroy']])) %>
    <br/>
    <%=button_tag 'go go!', get_path(@req_id,@oper) %>
<% end %>

帮助代码:

module AdminUsersHelper
    def get_path(req_id,oper)
   a=[req_id, oper].join("/")
   ["admin_users", a].join("/")
  end
end

2 个答案:

答案 0 :(得分:0)

表单提交的默认方法是POST。您需要相应地更改方法。

<%= form_tag( '/users/confirm', method: :get ) %>

我可以建议使用Javascript提交吗?您将对提交方法进行更加动态的控制。看看Here

答案 1 :(得分:0)

所以,最终我继续使用javascript解决方案,正如@Hassanin Ahmed建议的那样。谢谢你的帮助!

<%= form_tag('/admin_users', id: "admin_users_menu") do %>
[...]
<font size=4>
    <u>select user:</u>
</font>
<br>
<br>
<select id="admin_user_id" name="admin_user[id]">
  <%= options_for_select @admin_users.collect{|user| [user.login, user.id]} %>
</select>
<br>
<br>
<font size=4> <u>select option:</u></font><br><br>
<input type="radio"  checked name="select_op"  value= "edit" > edit
<br>
<br>
<input type="radio"  name="select_op"   value= "delete" > delete
<br>
<br>
<%= submit_tag "go" %>
<br>
<br>
<% end %>
<script>
$(function (){  
    $("#admin_users_menu").submit(function() {return direct_me() })
})
function direct_me(){
    //getting the admin_user id
    var au_id=$('select').val()
    //getting the desired method
    var op=$('input[name=select_op]:radio:checked').val()
    //making the default url
    var u="admin_users/"+au_id
    var f=$("form")
    if(op=='edit'){
    u=u+"/edit"
    f.attr("method","GET")
}
    else if(op=='delete'){
        f.attr("method","POST")
      f.append("<input type='hidden' name='_method' value='delete'>");
    }
    f.attr("action",u)
    if(op=='delete') return confirm("Are you sure?")
}
</script>