在轨道js上调用404,可能是错误的路由定义

时间:2014-06-17 14:52:57

标签: javascript ruby-on-rails ajax

点击链接意味着将部分数据加载到部分内容时,我收到以下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 %>

我觉得我的路线写错了。我已经尝试过乱搞它并移动文件。

另外,请随时提供有关我正在使用的策略的总体建议。

感谢。

编辑:更新了链接定义。

2 个答案:

答案 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和危险,所以我建议你考虑重新考虑这个功能。