单击旨在将部分数据加载到部分数据的链接时,出现以下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 %>
我感觉自己的路线写错了。我试过弄乱它并移动文件。
此外,请随时就我使用的策略提供总体建议。
谢谢。
编辑:更新了链接定义。
最佳答案
如果要链接到特定资源,通常需要在对foo_path
的调用中包括模型实例。下面的代码是解决此问题的一种更加Railsy的方式:
routes.rb
resource :businesses
get 'activate_billing/:id' => 'billing#activate', :as => :activate_billing
我在Rails路线上有些生疏,所以
activate_billing
的路线可能不正确。business_controller.rb
class BusinessesController < ApplicationController
def index
@businesses = Business.all
end
end
app / views / businesses / index.html.erb
<% @businesses.each |business| do
<%= link_to business.name, activate_billing_path(business), :remote => true %><br>
<% end %>
对
activate_billing_path
的调用被传递给business
对象,该对象应在控制器中设置Id param
,并生成如下URL:/activate_billing/123
其中123
是business.id
。billing_controller.rb
class BillingController < ApplicationController
def activate
business = Business.find(params[:id])
business.billing.activate
render :success
end
end
除非您需要渲染某些特定内容,否则控制器只会发送200 OK响应。用问题中包含的代码很难分辨。
关于javascript - Rails js调用上的404,可能是错误的路由定义,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24266969/