これを行う方法は確かにあり、少し手間がかかりますが、コツをつかめば非常に簡単です。
change
まず、選択ボックスのイベントにjQuery 関数を追加します。これは、ファイルに JavaScript を追加することで実行できapplication.js
ます。ここでこれを行いたいので、javscript は目立たないようにします。application.js
ファイルで次のようなことを試すことができます。
$(document).ready(function(){
$("#select_field_id").change(function(){
var id = $(this).children(":selected").val();
var params = 'some_id=' + id;
$.ajax({
url: "/some_controller/change_folder",
data: params
})
});
これが行うことは、匿名関数をchange
id の select フィールドのイベントにアタッチすることselect_field_id
です。そのフィールドが変更されるid
と、選択されたオプションの が varid
に格納され、次に を実行して送信するリクエストのパラメーターを作成しますvar params = 'some_id=' + id;
。some_id
あなたが変更しているもののIDになります(それfolder_id
があなたの例で使用している場合)。
次に、コントローラーでこのリクエストを処理するメソッドを作成する必要があります。フォルダーの例では、これをフォルダー コントローラーに追加します。
def change_folder
@folder = Folder.find(params[:some_id])
respond_to do |format|
format.js
end
end
これは、 ajax リクエストによって に送信された ID に基づいてフォルダーを見つけるだけchange_folder
です。また、レンダリングする対応するファイルchange_folder.js.erb
またはファイルも探します。change_folder.js
ここで、change_folder.js.erb
ファイルを作成する必要があります。div
ページの一部の HTML を取得した新しいフォルダーに置き換える必要があるため、一意の ID を持つ何らかのセクションが必要です。
内部change_folder.js.erb
では、次のように記述できます。
$('#your_div').html("<%= escape_javascript(render(partial: "folder",
locals: { :folder => @folder })).html_safe %>")
_folder.html.erb
これにより、ファイルと同じディレクトリにある部分呼び出しがレンダリングされchange_folder.js.erb
ます。パーシャルでは、フィールドを表示するために @folder 変数を使用する必要があるため、次のようなものが必要になります。
<%= @folder.name %>
<%= @folder.last_updated %>
あなたの_folder.html.erb
パーシャルの中に。.name
もちろん、.last_updated
Folder モデルのプロパティで構成されています。代わりに、Folder モデルに指定したプロパティを使用する必要があります。
これにより、必要な場所に移動できるはずです。何か明確にする必要がある場合はお知らせください。