点击链接意味着将部分数据加载到部分内容时,我收到以下javascript错误:
GET http://localhost:3000/activate_foo_path 404 (Not Found)
我有以下链接:
<%=link_to foo.name, "activate_#{foo.name.gsub(' ', '_').downcase}_path", :remote => true %>
这是我的路线条目:
get "activate_foo" => 'bar#activate_foo', :as => :activate_foo
控制器方法:
def activate_foo
@bars = Bar.includes(:fobs).where(:fobs => {:id => 1})
respond_to do |format|
format.js
end
end
我有一个文件views / bars / activate_foo.js,内容为:
$("#bar-listings").html("<%= escape_javascript(render partial: 'foo', locals: { bars: @bars } ) %>");
这是应该替换的div:
<div id="data-service-listings">
<p>Whatever</p>
</div>
然后我有_foo.html.erb:
<% @bars.each do |bar| %>
Do stuff with <%= bar %>
<% end %>
我觉得我的路线写错了。我已经尝试过乱搞它并移动文件。
另外,请随时提供有关我正在使用的策略的总体建议。
感谢。
编辑:更新了链接定义。
答案 0 :(得分:1)
如果要链接到特定资源,通常需要在对foo_path
的调用中包含模型实例。下面的代码是更多Railsy的解决方法:
<强>的routes.rb 强>
resource :businesses
get 'activate_billing/:id' => 'billing#activate', :as => :activate_billing
我的Rails路线上有点生锈,因此activate_billing
的路线可能不正确。
<强> businesses_controller.rb 强>
class BusinessesController < ApplicationController
def index
@businesses = Business.all
end
end
应用/视图/商家/ index.html.erb 强>
<% @businesses.each |business| do
<%= link_to business.name, activate_billing_path(business), :remote => true %><br>
<% end %>
对activate_billing_path
的调用会传递business
对象,该对象应在控制器中设置标识param
,并生成如下网址:/activate_billing/123
其中{{1}是} 123
。
<强> billing_controller.rb 强>
business.id
控制器只发回200 OK响应,除非你需要渲染特定的东西。使用您提出的问题中包含的代码很难说清楚。
答案 1 :(得分:0)
您使用两个字符串作为参数调用link_to:
<%=link_to foo.name, "activate_#{foo.name.gsub(' ', '_').downcase}_path", :remote => true %>
在这里,第一个参数是:foo.name,这很好。
第二个参数是“激活_#{foo.name.gsub('','_')。downcase} _path”这将是一个字符串,其方式与“http://www.google.com”相同,是一个字符串。
你想要的是“激活_#{foo.name.gsub('','_')。downcase} _path”的结果,所以实现这一目标的一种丑陋方式就是评估它:
<%=link_to foo.name, eval("activate_#{foo.name.gsub(' ', '_').downcase}_path"), :remote => true %>
但是这允许各种XSS和危险,所以我建议你考虑重新考虑这个功能。