Rails'.save
と . アクションが成功したかどうかに応じて (ブール値) をupdate
返します。true/false
フローでそれを利用する標準的な方法は次のとおりです。
def update
@node = Node.find params[:id]
respond_to do |format|
if @node.update(node_params)
format.js #-> invokes /views/nodes/update.js.erb
format.json { render json: @node.to_json }
format.html
else
format.js #-> invokes /views/nodes/update.js.erb
format.json
format.html
end
end
end
とまったく同じデータを使用するべきではありません-モデルでそれを行うことができます。必要に応じて説明できる関連などを使用するのが最適です。@video.update
@node
#app/models/node.rb
class Node < ActiveRecord::Base
belongs_to :media #?
before_save :set_media, on: :update
private
def set_media
self.media.name = self.name
self.media.description = self.description
end
end
アヤックス
私のフロントエンド UI 開発者は、コールバックが必要な jQuery をいくつか持っています。
これについての仕様がわからないので、具体的なコードを提供することはできません。
私が言えることは、ajax を使用している場合は、サーバー側とクライアント側のコードの違いを理解していることを確認する必要があるということです。
あなたの知性を侮辱するつもりはありませんが、後世のために説明します...
フロントエンド ajax は次のようになります。
#app/assets/javascripts/application.js
$(document).on("click", ".element", function(){
$.ajax({
url: "...",
data: ....,
success: function(data) { },
error: function(response) {}
});
});
...これはクライアント側のコードであるため、サーバーから返されたデータのみを処理できます。よくある誤解は、Ruby のコード/メソッドをこの中で使用できると多くの人が考えていることです。いいえ。
事前にパッケージ化されたデータのみをこれに送り返すことができるため、データを調整したい場合は、次のようにします。
def update
@node = Node.find params[:id]
@returned = "yes" if @node.update(node_params)
render [x], layout: !request.xhr?
end
これにより、フロントエンド JS を使用して操作できる条件付きデータを送り返すことができます。
$.ajax({
...
success: function(data) {
... do something with data
}
--
サーバー側のコードを使用したい場合は、組み込みのformat.js
機能を使用することをお勧めします。
def update
@node = Node.find params[:id]
respond_to do |format|
format.js #-> app/views/nodes/update.js.erb
end
end
これにより、JSがサーバー側でレンダリングされ、ブラウザーに渡されるため、Ruby コードを使用できます。詳細についてはわかりませんが、それを使用して次のことができることはわかっています。
#app/views/nodes/update.js.erb
<% if @node.something %>
$("js")....
<% else %>
...
<% end %>