2016-10-05 7 views
0

都市というモデルがあり、モデル内の利用可能な都市名を検索するための検索フォームを作成したとします。Rails 5のファイル命名規則

_city.html.erbという名前のAJAXリクエストの結果としてレンダリングされる部分に名前を付ける必要がありますか?もしそうなら、なぜですか?そうでなければ、ファイルに何か他の名前を付けて使用することができますか?たとえば、都市や検索などのモデルを追加するなど、モデルに複数のAJAX状況を使用する必要があるため、すべて同じ部分をレンダリングします。これは開発者が望むものではない場合があります。

私は別の名前を試しましたが、それ以外は何もできませんでした。
GETメソッドをcities#searchにマッピングして、私の検索ルートは/cities_searchです。
私のJSファイル名はsearch.js.erbです。 index.html.erbで

<%= form_tag cities_search_path, method: :get, remote: true do %> 
    <%= text_field_tag :search, nil, required: true %> 
    <%= submit_tag 'Search', name: nil%> 
<% end %> 
Search: 
<div id="search-results"> 

</div> 

JSコード:

$("#search-results").empty(); 
<% if @foundcities %> 
    $("#search-results").append("<%= j render @foundcities %>"); 
<% else %> 
    $("#search-results").append("No city found"); 
<% end %> 
+0

:js.erbファイルでは、この種のものにしてください_search.html.erbファイル、それは私のために働かなかった。 –

+0

を提供してください、私は名前の

<% result = @foundcities ? render(:partial => 'partial_name', :collection => @foundcities) : "No city found" %> $("#search-results").html("<%= j result %>"); 

+0

@MoatazZaitoun追加 –

答えて

1

<%= j render @foundcities %>これは、具体的には、部分的に名前を付けることが必要となっている部分です。オブジェクトのコレクションに対してrenderを呼び出すだけで、そのオブジェクト(クラス名を使用する)のデフォルト命名体系が使用されています。あなたが別の何かをしたい場合、あなたは別のrenderを使用してみてください例えば

render :partial => 'my_partial_name', :locals => {:found_cities => @foundcities} 

ローカル変数を参照する必要があります。注:代わりに、グローバル@foundcities

(のあなたの部分でfound_citiesもそれはです)

+0

ありがとうございます。私はあなたの方法を試しました、それは動作しますが、私はIF条件やスタイリングのようなファイルに何かを書く場合、何も表示されません(私は私の元のコードでそれを行うことができた、私はIFの条件だけでなく、これは:<%if @foundcities%><%= \t @ foundcities.name%> <% end %>) –

+0

私はその問題を理解していません。 (また、おそらく新しい質問としてカウントされます...部分を変更できないという元の問題は修正されています)。これに基づいて新しい質問を作成し、コード例などを含めることができますか?あなたはこの質問に戻り、彼らが接続していることを参照することができます。また、ここに新しい質問へのリンクを投稿すると、通知され、見ることができます:) –

+1

遅れて申し訳ありません、私は新しい質問をするたびに通知します。ありがとう:) –

0

多くのオプションがレンダリングされています。この場合、次のようにします。

render :partial => 'partial_name', :collection => @foundcities 

次に、部分ファイルの名前は "_partial_name.html.erb"となります。

は、それはあなたのアクション名
+0

私はJS- '$("#検索結果 ")でこれを試しました。( "%% render:partial => 'cities/search'、:collection => @foundcities%>");端末上でパーシャルがレンダリングされたが、何も表示されないことを伝えます。私は ':collection'属性を削除しましたが、' <%= @ foundcities.name%> 'を使って印刷することができましたが、if条件やスタイリングのようなファイルには何も書き込めませんでした。 –

+0

javascript/jqueryでは、append関数にはエスケープ文字列が必要です。答えに追加... – Swards

+0

遅れて申し訳ありませんが、それはまだ動作していません。私は代わりに新しい質問をします。 –