【问题标题】:Generate link_to using :url =>使用 :url => 生成 link_to
【发布时间】:2015-12-23 15:01:15
【问题描述】:

我正在生成一个带有确认消息的链接,但在包含确认消息的方式上遇到了问题。

我已经对rails 4.0.10rails 4.2.2 进行了尝试,它产生了相同的输出。

这是我的link_to 代码:

<%= link_to 'Destroy Comment', :url => [comment.article, comment], :method => :delete, :remote => true, :confirm => "are you sure?" -%>

它会生成以下链接:

<a data-remote="true" href="/articles/4?confirm=are+you+sure%3F&amp;method=delete&amp;url%5B%5D=4&amp;url%5B%5D=5">Destroy Comment</a>

这显然是行不通的,因为它将 javascript 确认消息直接放入链接的 url。

我发现如果我从link_to 中删除:url =&gt;,它似乎工作正常。

<%= link_to 'Destroy Comment', [comment.article, comment], :method => :delete, :remote => true, :confirm => "are you sure?" -%>

<a confirm="are you sure?" data-remote="true" rel="nofollow" data-method="delete" href="/articles/4/comments/5">Destroy Comment</a>

有没有办法解决这个问题并保留:url =&gt; 中的link_to?我真的很喜欢那里有 :url =&gt; 用于特殊目的。我查看了 api 文档,但找不到具体的答案。有一条评论声称这样的事情应该有效。 http://apidock.com/rails/ActionView/Helpers/UrlHelper/link_to#1227-link-to-with-as-routing

【问题讨论】:

  • 你在哪里找到关于 :url 选项的信息,link_tourl_for 的文档都没有提到它,除了你在第三方网站上指出的评论之外没有其他提及它。还要记住 Rails 更喜欢约定而不是配置,任何 Rails 开发人员都会知道 URL 是如何构建的,而无需明确调用它:url
  • @Leito - 它来自我正在开发的旧版 Rails 应用程序(我不是该应用程序的原始创建者)。
  • 请编辑您的问题以包含您使用的 Rails 版本,这是解决此问题的关键信息。
  • 更新了 rails 版本。我试过4.0.104.2.2

标签: javascript ruby-on-rails ruby-on-rails-4


【解决方案1】:

在您的第一个示例中,您将哈希作为第二个参数传递,它与此方法签名匹配:

link_to(body, url_options = {}, html_options = {})

导致 Rails 将其解释为 url_options,这就是您获得该链接的原因。

如果你真的想使用:url=&gt;,那么你可以创建自己的辅助方法,比如link_to_with_url,它需要包含:url键作为第二个参数的哈希:

def link_to_with_url(body, options={})   
  url = options.delete(:url); 
  if url.nil?
     raise "Can't link to something that doesn't have a URL"
  else
     link_to body, url, options
  end
end

您也可以重载 Rails 的 link_to 方法,但我建议不要这样做。

【讨论】:

    【解决方案2】:

    试试这个:

    <%= link_to 'Destroy Comment', :url => [comment.article, comment], :method => :delete, :remote => true, :data => {:confirm => "are you sure?"} %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-09
      • 2020-09-05
      • 1970-01-01
      相关资源
      最近更新 更多