我正在为我的一个模型构建索引。而不是通常的表,我想有两个组合框:一个用于选择对象,另一个用于选择方法(编辑或销毁)。单击提交按钮后,我应该被重定向到适当的方法引用(例如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
答案 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>