Ruby on rails RubyonRails——用javascript用新值更新部分?
每次单击链接时,我都想刷新Rails中的一个部分,但它似乎没有任何作用 有人能发现错误吗 index.html.erbRuby on rails RubyonRails——用javascript用新值更新部分?,ruby-on-rails,ruby,Ruby On Rails,Ruby,每次单击链接时,我都想刷新Rails中的一个部分,但它似乎没有任何作用 有人能发现错误吗 index.html.erb <% @users.each do |u| %> <% if !u.nil? and u.department_id == department.id %> <%= link_to "#{u.first_name} #{u.last_name}", professor_refresh_path(u.id), r
<% @users.each do |u| %>
<% if !u.nil? and u.department_id == department.id %>
<%= link_to "#{u.first_name} #{u.last_name}", professor_refresh_path(u.id), remote: true %>
<% end %>
<% end %>
<div id="profile"></div>
Hello, <%= user %>
$('#profile').html('<%=j render partial: "/professors/profile", locals: {user: @user} %> ');
def refresh
@user = @user + 1
respond_to do |format|
format.html
format.js
end
end
resources :professors do
get 'refresh'
end
Hello "<%= @user %>"
routes.rb
<% @users.each do |u| %>
<% if !u.nil? and u.department_id == department.id %>
<%= link_to "#{u.first_name} #{u.last_name}", professor_refresh_path(u.id), remote: true %>
<% end %>
<% end %>
<div id="profile"></div>
Hello, <%= user %>
$('#profile').html('<%=j render partial: "/professors/profile", locals: {user: @user} %> ');
def refresh
@user = @user + 1
respond_to do |format|
format.html
format.js
end
end
resources :professors do
get 'refresh'
end
Hello "<%= @user %>"
据我所知,@user
在这里是未定义的,因为它与@user=nil+1
从控制器中不能渲染部分。控制器可以响应查看文件
def refresh
@user=User.find(params[:id]) #you need to take data from database
@user = @user + 1
respond_to do |format|
format.html
end
end
views/profesors/refresh.html.erb
<% @users.each do |u| %>
<% if !u.nil? and u.department_id == department.id %>
<%= link_to "#{u.first_name} #{u.last_name}", professor_refresh_path(u.id), remote: true %>
<% end %>
<% end %>
<div id="profile"></div>
Hello, <%= user %>
$('#profile').html('<%=j render partial: "/professors/profile", locals: {user: @user} %> ');
def refresh
@user = @user + 1
respond_to do |format|
format.html
format.js
end
end
resources :professors do
get 'refresh'
end
Hello "<%= @user %>"
我不确定这是否是您想要做的,但是使用UJS是rails进行
部分加载的方式
有
刷新.js.erb并将其放入app/views/professors
里面有
$('.profile').html('<%=j render partial: "/professors/profile", locals: {user: @user} %> ');
只要确保路径正确就行了
这将调用类型为js的刷新操作,并启动refresh.js.erb,使js在那里工作
要使用超时,您需要使用jquery ajax get with javascript类型,方法是将accept头设置为与此处的答案类似这里没有什么神秘之处,您的点击处理程序中有一个简单的输入错误,#profile
而不是。profile
在标记中没有任何地方可以定义id为“profile”
的元素,而#profile
将匹配该元素。您仅使用类“profile”
定义一个div
单击处理程序的内容如下:
$('#profile').load('/professors/refresh');
当间隔回调读取时:
$('.profile').load('/professors/refresh');
其中一个永远不会起作用,根据您提供的标记,它是一个单击即可运行的#profile
。首先,在ur refresh.js.erb中,您将profile指定为类。它应该是一个id。请尝试使用
$('#profile').replaceWith("#{escape_javascript(render partial: 'professors/profile', locals: { user: @user })}");
因为@user是刷新方法中唯一的实例变量。另外,从刷新方法中的ur代码来看,似乎只是更新了计数。因此,我的建议是使用新值更新视图上的值,而不是替换整个部分。它不是重新加载还是只是?@OldPro它根本没有重新加载:(那么它能做什么?@NickGinanto嗯,它现在没有做任何事情。我希望它能做的是在用户变量中添加1,然后用新值刷新部分。但是,它根本没有加载,并且在index.html.erb文件中没有显示任何内容,我想让部分进入其中。看看我的答案,也许它能帮你一点忙(等一下,我需要先写)谢谢你的回答,但当我点击链接时,它仍然没有做任何事情。我得到了一个错误,未定义的方法“professors\u refresh\u path”用于#。我猜它与routes.rb文件有关?我如何制作一个与此匹配的路由?在控制台中键入rake routes以查看刷新操作的路由。我想我有一个打字错误,应该是be professor_refresh_path(单数professor而非复数)同样,正如Joe的回答所说,确保有刷新操作的路径。它现在似乎给了我另一个错误。它说的是未定义的局部变量或#的方法“user”。确保包含局部变量:{..}此外,我建议使用诸如pry之类的调试器,因为我无法一个错误一个错误地调试您的代码。或者这样做,或者在此处显示您的整个相关代码,以便我可以查看。很明显,问题不仅仅存在于此打字错误中