#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, но говорит, что к ней нет маршрута. Я добавил вручную маршрут для уничтожения с помощью сопоставления, и это работает, но, следуя тому, что вы сказали, это «неправильно». Есть идеи, как я могу решить?