在Rails 3中使用自定义控制器方法破坏类似功能

时间:2012-05-18 03:08:49

标签: ruby-on-rails-3 rest controller destroy

我有一个名为patient_admissions的资源,它拥有所有RESTful路由。它嵌套在另一个名为patients的资源下。我想在名为patient_admissions的{​​{1}}控制器中添加另一个方法,该方法更新名为discharge的模型中的字段(带:discharge_date)并将该值保存在表中。< / p>

我希望这可以像Date.now方法一样工作,因为如果我的destroy视图中的表中列出了一堆patient_admission个对象,我只需点击将出现index链接和一个确认框,我会点击“确定”然后更新该值,而无需先转到另一个视图并处理表单。

如果不诉诸javascript之类的话,我怎么能这样做?非常感谢!

2 个答案:

答案 0 :(得分:1)

在路由指南中的导轨指南中,有adding additional restful actions:

部分

http://guides.rubyonrails.org/routing.html#adding-more-restful-actions

那里的例子将转化为:

resources :patient_admissions do
  member do
    put 'discharge'
  end
end

这将通过PUT识别/patient_admissions/1/discharge,并路由到PatientAdmissionsController的放电动作。

这至少可以让你为行动设置路由。

答案 1 :(得分:1)

您可以将link_tobutton_to帮助程序与控制器的自定义成员路由结合使用来完成此操作。这是一个例子:

#routes.rb
resources :patient_adminssions do
  put :discharge, :on => :member
end

请注意,我使用PUT添加自定义路由,因为该记录不会被删除,只是被修改。所以根据REST标准,我认为put是最合适的。

# in your view
<%= button_to "Discharge", discharge_patient_admission_path(@patient_admission), :method => :put,
             :confirm => "Are you sure you want to discharge this patient?" %>

这将创建一个隐藏形式的按钮,单击该按钮将显示确认消息,如果确认,则会向您的控制器操作发送请求,您可以按照建议设置适当的放电日期。