我在页面中有两个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 。我在这里缺少什么?
答案 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 # ...