以前は、Ajax を使用してビューの一部を更新したいときはいつでも、次のようにしていました。
- 更新したい部分からパーシャルを作成し、一意の ID を付けます。
#tracks
- そのAjax呼び出しのコントローラーに特別なアクションを作成し、
remove_track
すべての値を更新するなどして追加しますformat.js
- アクションと同じ名前の新しい JS ファイルを作成して、Rails
remove_track.js.erb
が次のような内容を含むファイルを自動的に呼び出すようにします。$('#tracks').html("<%=j render 'cds/show_tracks' %>");
remote: true
このアクションを呼び出すリンクに設定します。
index
これですべて問題ありませんが、現在、柔軟性のために通常のメソッドを使用して共通ビューを削除および更新しようとしてdestroy
います。つまり、このメソッドを Ajax または通常の方法で呼び出すことができます。上記のすべてよりも良い方法が必要であるため、これは非常に一般的なことだと思いました。
destroy.js.erb
これをコントローラーに入れるだけで、destroy メソッドでファイルを呼び出すことができます。
format.js { layout: false }
もちろんremote: true
、リンクに設定します。
私ができないのは、ビューを更新することです。更新したいテーブルは、一意の ID を持つ div で囲まれていますが、部分的ではないため、コンテンツの更新を拒否しています。多分私は何かが足りない。
パーシャルを作成して上記の方法で更新しなければならない運命にあるのでしょうか、それとも (Turbolinks を使用する以外に) もっと魔法のような方法がありますか?
ありがとう。
PS
また、これには、通常の CRUD ルートを使用して破棄するオブジェクト ID のみを渡すため、destroy メソッドに残りのパラメーターを渡すことができないという追加の欠点があることに気付きました。使用しようとした場合platform(action: destroy)
、またはplatform(method: delete)
エラーが発生した場合:
No route matches {:action=>"destroy", :controller=>"platforms"}
つまり、これらのパラメーターを渡したい場合は、新しいルートを作成する必要があります...
これらすべてのさらに別の欠点は、destroy メソッドで index メソッドにある検索と並べ替えのすべてのロジックを繰り返していることです。これは間違いなくそれを行う方法ではないと確信しています。