Ruby on rails 如何让rails ajax识别某个日期已更新,并将其反映在页面上?
我有一个链接Ruby on rails 如何让rails ajax识别某个日期已更新,并将其反映在页面上?,ruby-on-rails,ruby,ajax,rspec,Ruby On Rails,Ruby,Ajax,Rspec,我有一个链接 %a{href: "#", :data => {verifying_link: 'yes', id: link.id, table_row: index}} verify_by_js 那叫 $(function(){ $("a[data-verifying-link]='yes'").click(function(){ // spinner here a=$(this).parent() a.html('-spinner-') var
%a{href: "#", :data => {verifying_link: 'yes', id: link.id, table_row: index}}
verify_by_js
那叫
$(function(){
$("a[data-verifying-link]='yes'").click(function(){
// spinner here
a=$(this).parent()
a.html('-spinner-')
var id= $(this).data("id");
var row = $(this).data("tableRow");
$.get("/verify_link/"+id+"&table_row="+row, function(data) {
if (data.link.verified_date !== undefined) {
$("span#verify_link_"+row).html('<span class="done">Verified</span>');
} else {
$("span#verify_link_"+row).html('<span class="undone">Unverified</span>');
}
});
//a.html('DONE')
});
});
网络选项卡显示了一个有效的get
,用于/verify\u link/377&table\u row=0
我觉得我没有得到的是如何函数(数据){
如果(data.link.verified_date!==undefined
有效(建议使用另一个问题答案,以及get调用如何使用该答案)
服务器日志显示:
Started GET "/verify_link/377&table_row=0" for 127.0.0.1 at 2014-08-03 21:52:06 -0400
Processing by LinksController#verify_link as */*
Parameters: {"id"=>"377&table_row=0"}
User Load (0.2ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 2 LIMIT 1
Link Load (0.4ms) SELECT `links`.* FROM `links` WHERE `links`.`id` = 377 LIMIT 1
(0.1ms) BEGIN
(0.4ms) UPDATE `links` SET `verified_date` = '2014-08-04 01:52:06', `updated_at` = '2014-08-04 01:52:06' WHERE `links`.`id` = 377
(0.5ms) SELECT COUNT(*) FROM `links` WHERE (1 = 1 AND position = 347)
(44.6ms) COMMIT
Rendered links/verify_link.js.erb (0.2ms)
Completed 200 OK in 347.0ms (Views: 5.3ms | ActiveRecord: 46.3ms)
这有点让人困惑,因为它引用了app/view/links/verify_link.js.erb
,但这不是它所使用的
$ cat app/views/links/verify_link.js.erb
<%- if @link.verified_date %>
$("span#verify_link_<%=params['table_row']%>").html('<span class="done">Verified</span>');
<%- else %>
$("span#verify_link_<%=params['table_row']%>").html('<span class="undone">Unverified</span>');
<%- end %>
$cat app/views/links/verify_link.js.erb
$(“span#verify_link”)html('verifyed');
$(“span#verify_link”)html('Unverified');
其中文本
Verified
或Unverified
,而我让前一个文本有不同的文本-Verified OK
和Not Verified
,以确保它是在ui中使用的,并且它是(“未验证的”).在控制器中执行此操作。因为我看不到任何正确的成功和错误返回值
def verify_link
@link = Link.find(params[:id])
if @link.valid_get?
if @link.update_attribute(:verified_date, Time.now)
render nothing: true, status: 200
else
render nothing: true , status: 422
end
end
end
对所需的javascript文件执行此操作。并将$.get
更改为$.ajax
,因为$。get
回调仅在请求成功时调用,而不是在失败时调用。间接地,这也意味着,由于DOM正在更新(其正确性不正确)由于$.get
回调,这意味着请求成功。我正在使用$.ajax
,因为它看起来更优雅
$(function(){
$("a[data-verifying-link]='yes'").click(function(){
// spinner here
a=$(this).parent()
a.html('-spinner-')
var id= $(this).data("id");
var row = $(this).data("tableRow");
$.ajax({
url: "/verify_link/"+id+"&table_row="+row ,
type: 'GET',
success: function(r) {
$("span#verify_link_"+row).html('<span class="done">Verified</span>');
},
error: function(r) {
$("span#verify_link_"+row).html('<span class="undone">Unverified</span>');
},
complete: function(r) {
a.html('DONE');
}
});
});
});
$(函数(){
$([数据验证链接]=“是”)。单击(函数(){
//这里是纺纱机
a=$(this.parent())
a、 html('-spinner-')
var id=$(this.data(“id”);
var行=$(this).data(“tableRow”);
$.ajax({
url:“/verify_link/”+id+“&表_行=“+行,
键入:“GET”,
成功:函数(r){
$(“span#verify(验证链接)+行).html('verifyed');
},
错误:函数(r){
$(“span#verify_link"+row).html('Unverified');
},
完成:函数(r){
a、 html('DONE');
}
});
});
});
回复如何?添加了服务器日志。哦,我只是说你的更新文本。我以不同的方式回答了它,但它会起作用。如果你想根据你的更新得到答案,请告诉我。我非常喜欢这种方法。唯一的问题是,我遇到的问题与js分离时相同——我总是以“未验证”结束,即使是wh嗯,记录核实无误。
$(function(){
$("a[data-verifying-link]='yes'").click(function(){
// spinner here
a=$(this).parent()
a.html('-spinner-')
var id= $(this).data("id");
var row = $(this).data("tableRow");
$.ajax({
url: "/verify_link/"+id+"&table_row="+row ,
type: 'GET',
success: function(r) {
$("span#verify_link_"+row).html('<span class="done">Verified</span>');
},
error: function(r) {
$("span#verify_link_"+row).html('<span class="undone">Unverified</span>');
},
complete: function(r) {
a.html('DONE');
}
});
});
});