将参数传递给控制器​​时的Ruby路由

时间:2016-06-29 05:18:42

标签: ruby-on-rails ruby

在我看来,我将参数传递给控制器​​中的方法。

路径如下:     /boats/:id/destroy_image?image_id=#

我已经阅读了“从外部路由指南”指南,它只是简单地忽略了这种类型的选项,并且无法弄清楚如何正确地将其路由到boats#destroy_image方法

有人可以解释一下吗?

谢谢!

3 个答案:

答案 0 :(得分:0)

要删除rails中的项目,通常以这种方式执行

网址为:

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

在类似的视图中调用

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

它将由图像控制器中的destroy动作处理。

Restful路由将重用相同的url并更改方法 - 在船图像示例中,您可以分别使用:get,:patch或:delete来查看,更新或删除。

这可能足以让你前进。路由是rails的主要部分 - 包括在视图中生成URL和匹配对控制器#actions的请求。花一些时间熟悉rails路线和宁静的概念。

答案 1 :(得分:0)

确定。所以这很容易。您可以像这样添加路线

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

你可以简单地在params中发送额外的id。

答案 2 :(得分:0)

如果按照命名约定使用rails嵌套资源,

resources :boats do
  resources :images
end

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

这通过rails方式请求图像控制器。发送boat_id和图片ID。

但是,如果你想明确地将它传递给船只控制器,

在船只控制器中添加一条路线,

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

通过params发送 image_id

然后在控制器中,

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 

因此,您提到的路径会将您带到boat控制器中的destroy_image操作,即使路径dos不包含image_id作为查询字符串,但我们通过params发送它。那就是铁轨的力量。