使用HTTP谓词在控制器内生成链接

时间:2009-05-03 00:23:48

标签: ruby-on-rails

在Rails中使用restful资源,我希望能够在我的flash哈希中插入一个链接,用户可以单击该链接来销毁相关对象。唯一的问题似乎是我无法让生成的链接与RESTful控制器一起工作!

首先我试过

link_to "Change your reservation", reservation_path(@existing_reservation), :method => :delete

这不起作用,因为link_to是ActionView中的辅助方法,在控制器中不可用

接下来发现是url_for

url_for :controller => 'reservations', :actions => 'destroy', :method => :delete

让我回到演出动作。我已经尝试过我能找到的两种组合。 。 。但我似乎无法在我的控制器中创建一个链接,它将在删除方法中滑动!我生成的每个动作都会生成一个普通链接(GET),它调用show方法。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

ApplicationController.helpers.link_to将允许您在控制器中使用辅助方法,但我不确定是否严格遵循MVC。虽然我偶尔会发现需要,即打电话给number_to_currency

当您在该特定帮助程序中使用:delete选项时,会出现另一个问题。它会失败。在快速浏览一下源代码后,我无法立即看到修复。

首先,如果可能的话,我建议您将删除链接放在该页面的其他位置。如果确实需要它,你可以在视图中修改闪光灯。

即。在控制器中设置闪光灯:

flash[:notice] = "Flash message with a  DELETE LINK in it"

然后在视图中修改闪存之前显示它:

<%=  flash[:notice].gsub(/DELETE LINK/, link_to("delete", resource_path, :method => :delete)) %>

你可能想把它变成你自己的助手。如果你不喜欢gsub-ing文本,我相信你可以找到另一种方式,那么只需将链接附加到flash上​​即可?

希望有所帮助:)

答案 1 :(得分:0)

不要使用路径,而是尝试仅传递对象本身,例如

link_to "Change your reservation", @existing_reservation, :method => :delete