Ruby on rails RubyonRails——用javascript用新值更新部分?

Ruby 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

每次单击链接时,我都想刷新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), 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之类的调试器,因为我无法一个错误一个错误地调试您的代码。或者这样做,或者在此处显示您的整个相关代码,以便我可以查看。很明显,问题不仅仅存在于此打字错误中