没有路线匹配{:action =>“show”,:controller =>“restaurants”}

时间:2013-03-30 06:13:39

标签: ruby-on-rails-3 routes gmaps4rails

如果我想在我的主页上点击地图localhost:3000 / maps出现此错误没有路由匹配{:action =>" show",:controller =>&# 34;家餐馆"}
控制器/ maps_controller.rb

def index
    @maps = Map.all
    @json = Map.all.to_gmaps4rails do |map, marker|
       marker.infowindow info_for_restaurant(map.restaurant)
    end


    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @maps }
    end
end
def show
    @map = Map.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @map }
    end
end
private 
def info_for_restaurant(restaurant)
  link_to restaurant_path do
    content_tag("h2") do
      restaurant.name
    end
  end
end

的routes.rb

resources :restaurants
resources :maps

这是我的问题的答案:
控制器/ maps_controller.rb

def index
    @maps = Map.all
    @json = Map.all.to_gmaps4rails do |map, marker| 
      marker.infowindow render_to_string(:partial => "/maps/maps_link", 
        :layout => false, :locals => { :map => map})
    end


    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @maps }
    end
  end

视图/地图/ _maps_link.html.erb

<div class="map-link">
<h2><%= link_to map.restaurant.title, map.restaurant %></h2>
</div>

2 个答案:

答案 0 :(得分:0)

您在restaurant_path中引用info_for_restaurant,这是MapsController的一部分。 Rails在这里遇到了错误。

您需要在餐厅控制器中定义restaurant_path,或者此时在地图控制器中注释掉此功能。

答案 1 :(得分:0)

你的方法在几个层面都是错误的。让我们一起做一件事:

1)您对路线助手的调用是错误的:

restaurant_pathshow操作的路径助手。 show操作需要id参数才有效。您的电话缺少参数。

所以,你的代码必须是这样的:

def info_for_restaurant(restaurant)
  link_to restaurant_path(restaurant) do
    content_tag("h2") do
      restaurant.name
    end
  end
end

要查看每个操作所需的参数,您可以在控制台上运行rake routes

然而,这并没有解决问题,因为你也是:

2)从您的控制器调用视图助手

link_tocontent_tag是视图帮助程序方法,您不希望打扰控制器查看问题。因此,解决此问题的最佳方法是将info_for_restaurant方法移动到帮助程序,然后从视图中调用它。

所以,现在,您的控制器不会向@json分配任何内容,您的视图的最后一行将如下所示:

<%= gmaps4rails @maps.to_gmaps4rails {|map, marker| marker.infowindow info_for_restaurant(map.restaurant) } %>