2012-05-18 1 views
0

У меня есть ресурс под названием patient_admissions, который имеет все маршруты RESTful. Он вложен под другим ресурсом, который называется patients. Я хочу добавить еще один метод к моему контроллеру patient_admissions с именем discharge, который обновляет поле в модели с именем :discharge_dateDate.now) и сохраняет это значение в таблице.Уничтожьте функциональность с использованием метода пользовательского контроллера в Rails 3

Я хотел бы, чтобы это работало как метод destroy, в том, что если у меня есть куча patient_admission объектов, перечисленных в таблице в моей index зрения, я мог бы просто нажать на Discharge ссылку и появится окно подтверждения, я будет щелкать «ok», а затем значение будет обновляться без необходимости сначала перейти к другому виду и обработать формы.

Как я могу это сделать, не прибегая к чему-то вроде javascript? Большое спасибо!

ответ

1

В направляющих рельсов на Routing, есть раздел на adding additional restful actions:

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

На примере было бы перевести на что-то вроде:

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

Это признают /patient_admissions/1/discharge с PUT и маршрут к действию разряда PatientAdmissionsController.

Это, по крайней мере, позволит вам настроить маршрутизацию для действия.

1

Вы можете сделать это с помощью помощников link_to или button_to в сочетании с маршрутом пользовательского участника для вашего контроллера. Вот пример:

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

Обратите внимание, что я использовал PUT, чтобы добавить пользовательский маршрут, потому что запись не будет удалена, просто изменена. Поэтому, согласно стандартам REST, я считаю, что это наиболее подходящий вариант.

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

Это создаст кнопку в скрытой форме, которая при нажатии будет отображать сообщение подтверждения, и если она подтвердится, то он будет посылать запрос на ваши действия контроллера, где вы можете установить соответствующую дату разряда, как вы предложили ,

Смежные вопросы