使用:url =>

时间:2015-12-23 15:01:16

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

我正在生成一条包含确认消息的链接,但我对如何收录确认消息有疑问。

我已经使用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中。

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

<%= 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 =>中的link_to?我非常希望在那里有:url =>用于特殊目的。我查看了api文档,但找不到具体的答案。有一条评论认为这样的说法应该有效。 http://apidock.com/rails/ActionView/Helpers/UrlHelper/link_to#1227-link-to-with-as-routing

2 个答案:

答案 0 :(得分:0)

在第一个示例中,您将传递散列作为第二个参数,该参数与此方法签名匹配:

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

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

如果您真的想要使用:url=>,那么您可以创建自己的帮助方法,比如说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方法,但我会反对。

答案 1 :(得分:0)

试试这个:

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