2015-02-06 7 views
0

Что нужно использовать для сохранения переменных экземпляра с помощью различных действий контроллера # без использования сеанса?Как сохранить параметры через разные контроллеры Rails Действия в Rails

Вот пример задачи:

Существует Согласовать Госпитализации которых has_oneПредписание

От госпитализации # шоу У меня есть link_to рецепт # новых с дополнительными параметрами, как показано ниже :

<%= link_to t('hospitalizations.prescription'), new_prescription_path(hospitalization_id: @hospitalization.id,...) 

И трюк: по рецепту # new I ca п получить

@hospitalization = Hospitalization.find_by(id: params[:hospitalization_id]) 

Но когда я нажимаю отправить, и он приходит к рецепту # создать, @hospitalization ответы на ноль при попытке сделать что-то вроде

@prescription = @hospitalization.build_prescription(prescription_params) 

Как бы лучшим способом для создания этих параметров, чтобы они сохранялись или легко переносились между действиями контроллера #, которые вам нужны? Как мне создать экземпляр принадлежащей модели рецепта? Должен ли я помещать идентификатор прямо там, по рецепту № нового? Как:

@prescription = Prescription.new(hospitalization_id: params[:hospitalization_id]) 
+0

поэтому я понять вас - вы хотите новый рецепт (пустой один?), Созданный с каждым новым госпитализации? – Anthony

+0

Да, у каждой госпитализации должен быть свой собственный рецепт, но они не предназначены для регистрации вместе. Это отдельные этапы. – dillenburg

ответ

0

Используйте neseted resources этот путь:

resources hospitalizations do 
    resource :prescription 
end 

Таким образом, ваш путь будет выглядеть следующим образом:

/hospitalizations/:hospitalization_id/prescription 

и вы можете использовать следующие для его генерации:

new_hospitalization_prescription_path(@hospitalization) 

теперь в вашем контроллере вы можете получить доступ к параметру как params[:hospitalization_id]. Например, в create методы вашего PrescriptionController:

def create 
    hospitalization = Hospitalization.find(params[:hospitalization]) 
    prescription = Prescription.new(hospitalization: hospitalization, ...) 
    # ... 
end 
+0

Пробовал ваше решение, и я обнаружил, что мне пришлось добавить ': url => new_hospitalization_prescription_path' в мой' form_for @ prescription' Должно ли быть все? Потому что теперь я получаю ** Нет маршрутов [POST] "/ hospitalizations/6/prescriptions/new" **, что странно, потому что маршрут находится в моем рейке. – dillenburg

+0

Вы перезагрузили сервер? –

+0

Да, я сделал, и только что понял, что form_for был для рецепта # нового, в то время как он должен быть для рецепта # create, глупой ошибки здесь. Altho, я все еще не могу создать, он дает мне ту же ошибку «неопределенный метод ... для nil: nilClass», ссылающийся на @hospitalization. Должен ли я что-нибудь изменить? – dillenburg

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