【问题标题】:Generating a link within a controller with an HTTP verb使用 HTTP 动词在控制器内生成链接
【发布时间】:2009-05-10 22:05:26
【问题描述】:

使用 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 方法。

有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

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

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

    首先,如果可能,我建议您将删除链接放在该页面的其他位置。如果您真的需要在 flash 中使用它,您可以在视图中修改 flash。

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

    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 怎么样?

    希望对您有所帮助:)

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 不能在控制器中使用“link_to”方法。 . .它仅用于视图。
      • 是的,你是对的。抱歉,我没有仔细阅读您的消息。没有将链接硬编码到视图中,我对此感到很困惑。
      猜你喜欢
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      • 2019-07-11
      • 1970-01-01
      • 2013-06-28
      • 2018-09-18
      • 2022-01-10
      • 1970-01-01
      相关资源
      最近更新 更多