2016-01-06 3 views
1

Я знаю, что это было задано, но решение не сработало.Как передать идентификатор одного объекта контроллеру другого объекта?

Я пытаюсь передать идентификатор группы контроллеру процедуры, поэтому я могу сделать эту процедуру принадлежащей этой группе.

Group Show View: контроллер

<%= link_to 'Create a Procedure', new_procedure_path(:group => @group.id), class: 'btn btn-default btn-small' %> 

Процедура:

def new 
    @procedure = Procedure.new 
    @group = Group.find(params[:group]) 

Маршруты:

resources :groups, only: [:new, :create, :show, :destroy] 
    resources :procedures 
+1

Вы только указали метод '# new' в своем контроллере. Пожалуйста, также покажите метод '# create', в котором запись' Procedure' будет фактически сохранена. –

ответ

1

Если требуется group_id, сделать его частью адреса и не нужно будет это в виде вида. У вас будет group_id в параметрах: params[:group_id] - то, что должен ожидать контроллер.

resources :groups, only: [:new, :create, :show, :destroy] do 
    resources :procedures 
end 

В контроллере, сделайте следующее:

def new 
    @group = Group.find(params[:group_id]) 
    @procedure = @group.procedures.new 
end 

А вы бы ссылку на новую страницу, как это

<%= link_to 'Create a Procedure', new_group_procedure_path(@group), class: 'btn btn-default btn-small' %> 
0

Чтобы далее добавить к Swards ответ, вы ищете на nested resources ...

#config/routes.rb 
resources :groups, except: [:edit, :update] do 
    resources :procedures #-> url.com/groups/:group_id/procedures/new 
end 

-

Когда вы отправляете запрос на ваш сервер, вы запрашиваете «ресурс».

Как определено HTTP spec,

Клиент отправляет сообщение запроса HTTP на сервер. Сервер, который предоставляет ресурсы, такие как HTML-файлы и другого контента, или выполняет другие функции от имени клиента

Вот почему маршруты Рельсы имеют resources директивы.

В вашем случае ресурсы, которые вы запрашиваете, должны зависеть от другого «родительского» ресурса, поэтому вы должны использовать «вложенный» шаблон. Это обеспечивает параметр «родительского» вар в вашем зависимого контроллера:

#app/controllers/procedures_controller.rb 
class ProceduresController < ApplicationController 
    before_action :set_group 

    def new 
     @procedure = @group.procedures.new 
    end 

    private 

    def set_group 
     @group = Group.find params[:group_id] 
    end 
end 

-

Ваш метод связывания будет работать с Swards рекомендации; вы также можете воспользоваться polymorphic_path:

<%= link_to 'Create a Procedure', new_polymorphic_path([@group, :procedure]), class: 'btn btn-default btn-small' %> 
+0

Итак, решение работало, но теперь, когда я пытаюсь представить свою форму, я получаю «Нет маршрута» [POST] »/ groups/14/procedure/new». Не знаете, почему это происходит потому, что ресурсы не должны автоматически создавать почтовый маршрут? – Babbz77

+0

Это потому, что вы передаете запрос 'POST' вашему« новому »действию, это должно быть' GET' –

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