2016-06-29 2 views
0

На мой взгляд, я передаю параметр методу в моем контроллере.Рубиновая маршрутизация при передаче параметра контроллеру

Путь выглядит следующим образом: /boats/:id/destroy_image?image_id=#

Я прочитал маршрутизации извне В руководстве, и это только юбки над этим типом опции кратко и не удалось выяснить, как этот маршрут к методу boats#destroy_image.

Может ли кто-то пролить некоторый свет?

Спасибо!

+1

Пожалуйста, добавьте код, который вы пробовали. – Sravan

ответ

0

Для удаления элемента в рельсах, это обычно делается таким образом

URL-адрес будет:

:url => /boats/:boat_id/images/:id, :method => :delete 

Это называется в представлении, как так

= link_to "delete", boat_image_path(boat, image), :method => :delete 

, и это будет обрабатываться действием destroy в контроллере изображений.

Восстанавливаемые маршруты будут повторно использовать один и тот же URL-адрес и изменить метод - в примере изображения лодки вы можете использовать: get,: patch или: delete для просмотра, обновления или удаления соответственно.

Это, вероятно, достаточно, чтобы вы начали. Маршруты являются важной частью рельсов - как для генерации URL-адресов в представлениях, так и для сопоставления запросов к действиям контроллера #. Потратьте некоторое время, чтобы ознакомиться с маршрутами рельсов и спокойными концепциями.

0

ok. Так что это легко. Вы можете добавить маршрут, подобный этому

get '/boats/:id/destroy_image' => 'boats#destroy_image' 

Вы можете просто отправить этот дополнительный идентификатор в params.

0

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

resources :boats do 
    resources :images 
end 

<%= link_to 'Delete Image', [@boat, @image], confirm: 'Are you sure?', method: :delete %> 

Этот запрос к контроллеру изображений по пути рельсы. отправив идентификатор boat_id и идентификатор изображения.

Но, если вы хотите явно маршрут, чтобы контроллер лодки,

добавить маршрут в контроллере лодки как,

delete '/boats/:id' => 'boats#destroy_image', as: :destroy_image(image.id) 

отправить image_id через Params,

затем в контроллере,

class BoatsController < ApplicationController 


    def destroy_image 
     @image = Image.find(params[:id]) 
     @boat = @image.boat //do anything you want with the boat object 

     if @image.destroy 
     else 
      // *** ***// 
     end 

     respond_to do |format| 
      format.html { redirect_to list_tasks_path(@task) } 
      format.json { head :ok } 
     end 
    end 

end 

Итак, маршрут, о котором вы упомянули, приведет вас к действию destroy_image в контроллере судов, даже если маршрут dos не содержит image_id в качестве строки запроса, но мы отправляем его через params. Это сила рельсов.

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