没有匹配的路由 {:action=>"show", :controller=>" restaurants"}.[英] No route matches {:action=>"show", :controller=>"restaurants"}

本文是小编为大家收集整理的关于没有匹配的路由 {:action=>"show", :controller=>" restaurants"}.的处理方法,想解了没有匹配的路由 {:action=>"show", :controller=>" restaurants"}.的问题怎么解决?没有匹配的路由 {:action=>"show", :controller=>" restaurants"}.问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

如果我想在主页上单击地图 localhost:3000/maps 会出现此错误 No route matches {:action=>"show", :controller=>"restaurants"}
控制器/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

views/maps/_maps_link.html.erb

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

推荐答案

你的方法在几个层面上都是错误的.让我们一次一个地处理它们:

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) } %>

本文地址:https://www.itbaoku.cn/post/1793744.html