Удаление вложенных объектов

#ruby-on-rails #ruby-on-rails-3 #nested-forms

#ruby-on-rails #ruby-on-rails-3 #вложенные формы

Вопрос:

У меня есть профиль, и в этом профиле много curso ов (курсов). Я показываю все курсы, которые есть в профиле, в show.html.erb этом профиле.

 <% for curso in @profile.cursos %>
<li><%=h curso.nome %> - <%=h curso.universidade %><br>
Ingresso em: <%=h curso.ano_ingresso %> - Encerra em: <%=h curso.ano_termino %> 
<li>
<%= button_to 'Delete', { :action => "destroy", :id => curso.id },:confirm => "Are you sure?", :method => :delete %>
  

Таким образом, я могу показать все курсы, которые есть в профиле, на его странице, но button_to delete это просто не работает. Я уже много чего перепробовал, но, кажется, заблудился. Есть идеи о том, как я могу создать ссылку, кнопку или что-нибудь еще для удаления курсов?

Ответ №1:

В вашем файле routes

 resources :profiles do
    resources :courses
end
  

Тогда вы можете просто использовать метод link_to

 <%= link_to "Delete", profile_course_path(profile, course), :method => :delete %>
  

Убедитесь, что вы предоставляете правильные переменные profile и course

Затем в вашем courses_controller.rb вам нужно получить профиль.

 before_filter :get_profile

def get_profile
    @profile = Profile.find(params[:profile_id]) if params[:profile_id]
end

def destroy
  @course = Corse.find(params[:id])
  @course.destroy
  redirect_to profile_courses_path(@profile)
end 
  

Это вернет вас к правильному URL профиля с вложенными в него курсами.

Обновить

Для получения новых курсов вы можете воспользоваться следующей ссылкой:

 <%= link_to "New Course", new_profile_course_path(profile) %>
  

Это приведет вас к new действию в контроллере курсов.

Вам следует прочитать о вложенных формах здесь.

Комментарии:

1. Спасибо за ответ! Я думаю, это сработает, но когда я нажимаю на ссылку удалить, она перенаправляет меня к форме для создания нового курса. Я не знаю, связано ли это с тем, что у меня есть на моих маршрутах match '/profiles/:id_profile/cursos', :to => 'cursos#new' , но без этого соответствия я не могу создать какой-либо новый курс. Есть идеи?

2. просто используйте маршруты, которые я настроил. Удалите этот маршрут и проверьте код на наличие обновлений с новым курсом. Вы хотите использовать вложенные ссылки.

3. Спасибо, теперь я могу создать курс, и идея улучшается. Внес некоторые изменения в ссылку <%= link_to "Delete", profile_curso_path(@profile, curso), :method => :delete %> теперь она направляет меня к ссылке с помощью cursos /:curso_id, но говорит, что к ней нет маршрута. Я добавил вручную маршрут для уничтожения с помощью сопоставления, и это работает, но, следуя тому, что вы сказали, это «неправильно». Есть идеи, как я могу решить?