单击旨在将部分数据加载到部分数据的链接时,出现以下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其中123business.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/

10-10 21:57