在我看来,我将参数传递给控制器中的方法。
路径如下:
/boats/:id/destroy_image?image_id=#
我已经阅读了“从外部路由指南”指南,它只是简单地忽略了这种类型的选项,并且无法弄清楚如何正确地将其路由到boats#destroy_image
方法
有人可以解释一下吗?
谢谢!
答案 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发送它。那就是铁轨的力量。