同一个link_to助手上的不同行为 - 缺少模板

时间:2016-02-10 11:27:50

标签: javascript ruby-on-rails ruby ajax

我在页面中有两个link_to帮助程序,创建方式不同。我需要将我的回复称为.js,而不是.html。这个link_to工作正常,处理,输出由PatientsController #load处理为JS ,这是正确的行为。

<%= link_to image_tag(sender.avatar.url(:thumb), class: "wht admintabletrtd1image-none click_load"), patient_load_path(sender.id), :remote => true, :alt => "user"%>

但是,我页面中的另一个link_to帮助程序(见下文)却没有。单击时,它会输出 PatientsController的加载#load为HTML ,导致模板错误丢失。

<%= link_to :controller => n.specific.subject[:type].pluralize, :action => :load, :id => n.specific.subject[:id], :remote => true do %> // for the sake of this example, it becomes <%= :controller => 'patients', :action => :load, :id => 4, :remote => true do %>

他们都输出相同的链接, patient / 4 / load 。我在这里缺少什么?

1 个答案:

答案 0 :(得分:0)

第二个链接上的方法签名是错误的。

link_to(body, url, html_options = {})
  # url is a String; you can use URL helpers like
  # posts_path

link_to(body, url_options = {}, html_options = {})
  # url_options, except :method, is passed to url_for

link_to(options = {}, html_options = {}) do
  # name
end

link_to(url, html_options = {}) do
  # name
end
     

http://apidock.com/rails/ActionView/Helpers/UrlHelper/link_to

在第一个链接中,您传递一个文字字符串作为网址。第二种使用较旧的更冗长,非资源导向的语法。

离开用于分隔url选项的括号和html选项(remote: true实际上只是一个数据属性)会给出错误的链接:

link_to "WRONG!", controller: "articles", id: "news", class: "article"
# => <a href="/articles/index/news?class=article">WRONG!</a>

第二个例子应该是这样的:

link_to({ 
  controller: n.specific.subject[:type].pluralize, 
  action: :load, 
  id: n.specific.subject[:id] 
}, { remote: true }) do # ...

但你可能想让rails多态路由助手为你找出控制器的工作:

link_to([n.specific, :load], remote: true) do # ...