提交表格后出现问题

时间:2010-01-24 22:44:51

标签: ruby-on-rails

我是ruby on rails的新手,我构建了一个带有复选框的列表。我在这里询问如何使用params获取已检查的值,并让它工作。现在的想法是,如果我单击某个按钮,则对所选项执行某些操作,如果我单击另一个按钮,则执行另一个操作,但在回发后始终保持在同一页面。

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

我的观点中有以下表格:

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}

这将在提交至:

后重定向我
  

/ profiles / complete,我的表格是   / profiles / some id / my-announcements

另外,如果我添加另一个按钮(例如删除按钮),如何在点击它们时处理多个动作但保持同一个网址会怎么样?

2 个答案:

答案 0 :(得分:0)

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

第二 - 用于提交表单的按钮名称在update中发送,因此您可以区分用于提交表单的按钮。

Thirt - 你不能在Rails中“保持同一页面”(或者它可以,但是对抗Rails)。它应该是这样的:

  1. 在控制器中提交表单到操作,大部分时间它的url与'/ profiles /'或'/ profiles / id'相同,并且操作是区分bu方法(POST,PUT或DELETE)

  2. 区分您要执行的操作并尝试完成操作。如果不可能(例如验证错误),则只需显示具有实际值的相同表单,并显示无法完成的错误。如果用户刷新页面并再次提交params,他应该获得相同的页面和相同的错误,并且该操作也不应该完成。

  3. 如果此控制器完成请求,请重定向到其他页面。它的工作方式是这样的,因为如果用户刷新页面,那么(如果它被重定向)没有任何反应,他会回到新的页面。如果你不重定向用户会做第二次同样的动作,这并不总是你想要的。这个新页面可以是当然提交表单的页面

答案 1 :(得分:0)

那么,

我可以使用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语句将被替换为每个按钮的类似内容。例如:

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

是否清楚?