-1

マップをクリックしてホームページに移動したい場合 localhost:3000/maps はこのエラーを取得します No route matching {: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

MapsController の一部であるrestaurant_path内で参照しました。info_for_restaurantRailsはここでエラーに遭遇しました。

この時点で、in restaurant コントローラーを定義するかrestaurant_path、maps コントローラーでこの関数をコメントアウトする必要があります。

于 2013-03-30T06:29:26.427 に答える
0

あなたのアプローチはいくつかのレベルで間違っています。一度に 1 つずつ、それらに取り組みましょう。

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 に答える