我有一个名为patient_admissions
的资源,它拥有所有RESTful路由。它嵌套在另一个名为patients
的资源下。我想在名为patient_admissions
的{{1}}控制器中添加另一个方法,该方法更新名为discharge
的模型中的字段(带:discharge_date
)并将该值保存在表中。< / p>
我希望这可以像Date.now
方法一样工作,因为如果我的destroy
视图中的表中列出了一堆patient_admission
个对象,我只需点击将出现index
链接和一个确认框,我会点击“确定”然后更新该值,而无需先转到另一个视图并处理表单。
如果不诉诸javascript之类的话,我怎么能这样做?非常感谢!
答案 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_to
或button_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?" %>
这将创建一个隐藏形式的按钮,单击该按钮将显示确认消息,如果确认,则会向您的控制器操作发送请求,您可以按照建议设置适当的放电日期。