-1

如果我想通过我的主页点击地图 localhost:3000/maps 会出现此错误 No route matches {:action=>"show", :controller=>"restaurants"}
controllers/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

路线.rb

resources :restaurants
resources :maps

这是我的问题的答案:
controllers/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>
4

2 回答 2

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_to并且content_tag是视图辅助方法,并且您不想因视图问题而打扰您的控制器。因此,解决此问题的最佳方法是将您的info_for_restaurant方法移动到帮助程序,并从视图中调用它。

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

<%= gmaps4rails @maps.to_gmaps4rails {|map, marker| marker.infowindow info_for_restaurant(map.restaurant) } %>
于 2013-03-30T07:03:05.383 回答
0

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

此时您需要定义restaurant_pathin restaurant 控制器,或者在 maps 控制器中注释掉这个函数。

于 2013-03-30T06:29:26.427 回答