如果我想在我的主页上点击地图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>
答案 0 :(得分:0)
您在restaurant_path
中引用info_for_restaurant
,这是MapsController的一部分。 Rails在这里遇到了错误。
您需要在餐厅控制器中定义restaurant_path
,或者此时在地图控制器中注释掉此功能。
答案 1 :(得分:0)
你的方法在几个层面都是错误的。让我们一起做一件事:
1)您对路线助手的调用是错误的:
restaurant_path
是show
操作的路径助手。 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_to
和content_tag
是视图帮助程序方法,您不希望打扰控制器查看问题。因此,解决此问题的最佳方法是将info_for_restaurant
方法移动到帮助程序,然后从视图中调用它。
所以,现在,您的控制器不会向@json
分配任何内容,您的视图的最后一行将如下所示:
<%= gmaps4rails @maps.to_gmaps4rails {|map, marker| marker.infowindow info_for_restaurant(map.restaurant) } %>