Rails' .save
и. update
return true/false
(boolean) в зависимости от того, было ли действие успешным.
Стандартный способ использования, что в вашем потоке выглядит следующим образом:
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
Ajax
Мой фронт-енд разработчик UI имеет некоторые JQuery, что мне нужен обратный вызов для
Поскольку я не знаю спецификации для этого , Я не могу дать вам какой-либо конкретный код.
Что я могу вам сказать, что если вы используете Ajax, вы должны убедиться, что вы понимаете разницу между на стороне сервера & стороны клиента код.
Я не хочу оскорблять ваш интеллект, но я объясню это ради потомства ...
Frontend Аякса будет выглядеть следующим образом:
#app/assets/javascripts/application.js
$(document).on("click", ".element", function(){
$.ajax({
url: "...",
data: ....,
success: function(data) { },
error: function(response) {}
});
});
... так как это клиентская сторона код, вы можете иметь дело только с данными с сервера. Общим недоразумением является то, что многие люди думают, что они каким-то образом смогут использовать Ruby code/methods в этом. Нет.
Вы можете только отправить обратно предварительно упакованные данные для этого, так что если вы хотите, чтобы ваши данные условия, вы могли бы сделать что-то вроде этого:
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
Это делает позволяет использовать Ruby-код, как JS оказывается на стороне сервера, и передается в браузер. Я не уверен, как к специфике, но я знаю, что вы можете сделать следующее с ним:
#app/views/nodes/update.js.erb
<% if @node.something %>
$("js")....
<% else %>
...
<% end %>
вам нужна определенная функция в качестве обратного вызова делать (например, сделать некоторые другие задачи после сохранения) или вы просто проверить, что обновление прошло успешно? – wspurgin
Мне нужна определенная функция. У моего интерфейса пользовательского интерфейса есть jQuery, для которого мне нужен обратный вызов. Немного новичок в материалах AJAX, поэтому дайте мне знать, если вам нужна дополнительная информация. Я решил, что могу создать условие с UJS (update.js.erb). Я могу понять это, но моя основная проблема заключается в том, что я не знаю, как проверить сохранение, а затем выполнить функцию. Я не мог понять, будет ли работать 'after_save', и если да, то каким образом я его реализую. – mike0416
Думаю, мне понадобится немного больше информации. Вы хотите вернуть URL-адрес с обратным вызовом, который проверяет, обновляется ли видео/узел? Чтобы разработчик пользовательского интерфейса мог отправить запрос AJAX на него? Или вы говорите, что на основании того, правильно ли были обновлены видео и узел, вы хотите отправить обратный вызов? – wspurgin