0

ここにパズルがあります... (はい、私のキーワードに一致する質問がありますが、私の状況ではないようです...)

非常にシンプルな Rails アプリを入手しました。DB からすべてのモデルを返すか、または (ORM 経由ではなく) GET クエリ パラメータに基づいてフィルタリングを適用する、コントローラーの「インデックス」アクションのみ。

最初の 2 つのパラメーターは問題ありませんが、3 番目のパラメーターは私を夢中にさせます。それはサードパーティの宝石を使用しています(モデルによって表されるポイントからクエリで渡されたポイントまでの地理的距離を計算します)。コードは、コンソール、コントローラーのサーバー、および json をレンダリングする場合に正常に動作します。ただし、html をレンダリングしようとすると、ビューは次のように停止します。

Completed 500 Internal Server Error in 959ms

ActionView::Template::Error (stack level too deep):
  sugar-high (0.4.6.4) lib/sugar-high/string.rb:8

ちなみに、sugar-high は私が使用している geo-distance gem の依存関係ですが、接続がわかりません。すべての計算はコントローラーで行われ、json レンダリングで動作します...なぜレンダリングはHTMLビューが壊れますか?

ここでコードを表示できます。これはばかげていて無害です。モデルのリストを調べて、「li」内の各モデルをレンダリングするだけで、他の処理はありません: https://github.com/alexakarpov/earthquakes/blob/master/app /views/earthquakes/index.html.erb

コントローラはここにあります:

https://github.com/alexakarpov/earthquakes/blob/master/app/controllers/earthquakes_controller.rb#L27

関心のある行は次のとおりです。

 near = params[:near]
    if near

      lat, long = near.split(',')
      @near_param = [lat, long]

      @quakes.keep_if { |q|
        dist = GeoDistance::Haversine.geo_distance(lat, long, q.latitude, q.longtitude).miles
        dist <= 5
      }
    end

    respond_to do |format|
      format.html
      format.json { render :json => @quakes }
    end
  end

「でも待って、もっとあるよ!」エラーが発生するとすぐに、「bad」パラメータがなくても、html に対する他のリクエストは機能しません。同時に、「bad」パラメータの有無にかかわらず、すべての json リクエストがレンダリングされ続けます。それで、明らかに、「ビュー」は、ええと...毒されますか?または、ビューではなく、テンプレートエンジン..または何でも、私はRailsに慣れていないため、適切な名前を取得できません...

4

0 に答える 0