提交表单后出现问题

提交表单后出现问题

问题描述:

我是Ruby on Rails的新手,我用里面的复选框创建了一个表单。我在这里问了如何用params得到检查值,然后让它工作。现在的想法是如果我点击某个按钮来执行一些操作,如果我点击另一个按钮,然后执行anoother操作,但回发后总是停留在同一页面。提交表单后出现问题

现在正在发生的事情是,我正在进行的动作,但同时到另一个网址。例如:

我有以下形式在我看来:

form_tag delete_profiles_path, :method => :put do 
    submit_tag 'Delete' 

    @my_announcements.each do |ann| 
     check_box_tag 'announcement[]', ann.id 
     end 
    end 

我的配置控制器:

def delete 
    #some action 
    end 

而且routes.rb中:

map.resources :profiles, :collection => {:delete => :put} 

这将重新定向后提交到:

/型材/完整的,和我的形式是在 /型材/一些ID /我-公告

另外,如果我添加另一个按钮,如删除一个,如何在点击它们时处理多个操作,但是处于相同的URL?

+0

你能澄清 - 另一个按钮会做什么? – tfwright 2010-01-24 22:53:15

+0

这只是一个例子。请不要关注控制器的任何功能,如“删除”,“编辑”或其他“标准”方法。我只想从列表中选择项目,然后单击某个按钮并在回发之后执行在同一页面上停留的操作(如我在第一个回答下面的评论中所述)。 – 2010-01-25 00:37:17

首先,你为什么用PUT而不是DELETE删除HTTP方法?您应该使用默认方法进行删除:使用:method => :delete和控制器#destroy操作(您也可以使用delete,但它像新显示您想要执行的操作,而destroy就像update)。

用于提交表单的按钮的第二个名称发送到params,因此您可以区分使用哪个按钮提交表单的bu参数。你可以在Rails中不能“保持在同一页面上”(或者它可能,但是对Rails来说不是)。这应该是这样的:

  1. 提交表单动作在控制器,大多数时间其网址为相同“/简档/”或“/简档/ ID”和动作是杰出的BU方法(POST, PUT或DELETE)

  2. 区分你想要做什么并尝试完成操作。如果这是不可能的(例如验证错误),那么只需显示与实际值相同的形式,并显示错误为何无法完成。如果用户刷新页面,并再次提交参数,他应该得到相同的页面和相同的错误,并且该操作也不应该完成。

  3. 如果此控制器完成请求,则重定向到其他页面。它是这样工作的,因为如果用户刷新页面,那么(如果它被重定向)没有任何事情发生,他会回到新页面。如果你不重定向用户会再次进行相同的操作,这并不总是你想要的。这个新页面可以是其中的形式从课程

+0

好吧。我想要做的是在用户通过选中复选框从列表中选择项目时执行一些操作。一旦他们点击了他们想要的按钮(删除只是一个例子),我希望网站留在同一页面,这不是我要求的疯狂。假设您使用的是Gmail,并且您希望选择五项内容,然后点击存档,您不会被重定向到另一个网址,那么您将与以前相同。我只是想这样做。谢谢。 – 2010-01-25 00:35:19

+0

@Brian你确定Gmail保持在同一页面上?我检查了'基本的HTML'(只是使用基本的HTML,而不是花哨的JavaScript)版本,它在提交后会重定向,所以对我来说就像我在回答中所示。它没有使用RESTfull网址,但这是另一回事。如果你想在没有页面重新加载的情况下执行它,那么你需要Ajax,但它稍微复杂一些。 – MBO 2010-01-25 07:43:30

+0

那么,我使用“花哨”版本,当我选择多个电子邮件,然后单击“标记为已读”,它将使用ajax。所以,再次,我的问题是我怎么能在一个表单中有多个ajax提交? – 2010-01-25 12:09:53

嘛提交页面,

如下我可以部分解决这个用ajax:

remote_form_for :profile, :url => {:controller => 'announcements', :action => 'deactivate'}, :html => { :method => :put} do |f| 
    f.submit 'Publish', :confirm => 'Are you sure?' 

这个伟大的工程。我现在想要做的是添加另一个“提交”或按钮,所以我可以执行多个操作,所以我猜想remote_form_for上的:url语句将被替换为每个按钮的那样。例如:

发布按钮:在某些控制器中执行某些操作。 取消激活按钮:执行另一个。

是否清楚?