【问题标题】:Response not added to the DOM structure after calling rails helper method render in the controller在控制器中调用 rails helper 方法渲染后响应未添加到 DOM 结构中
【发布时间】:2015-10-02 11:54:42
【问题描述】:

因此,一旦用户单击这样的链接,我将显示一些需要在模板中呈现的详细信息 -

<%= link_to "show user", show_user_path(user.id), method: :get, remote: true %>

我的控制器看起来像这样 -

def show
  @user = User.find(params[:id])
  render :partial => "userprofile", :locals => { :user => @user }
end

点击链接后,请求工作正常。我在 Chrome 调试工具的网络选项卡中获得了模板代码的响应,并且控制台中没有错误。

响应的 HTML 未附加到页面的 DOM 结构中,因此我无法查看发送的详细信息。请帮帮我,我还是 RoR 框架的新手。 谢谢!!!

编辑 - 部分文件:userprofile.html.erb

<h1><%= user.name %></h1>
<p><%= user.bio %></p>

这些字段是完整的,服务器没有抛出任何错误。它返回了 -

Rendered _userprofile.html.erb <3.0ms>
Completed 200 OK in 18ms <Views: 13ms | ActiveRecord: 1.0ms>

【问题讨论】:

  • 编辑答案并发布部分文件。
  • 我已经添加了部分文件 @LukyBoy-KU 。请帮助我找到我不希望为此编写明确的 ajax 请求的解决方案。谢谢。

标签: ruby-on-rails ruby ajax ruby-on-rails-4


【解决方案1】:

您应该为下一个 AJAX 事件实现事件监听器:

  • ajax:beforeSend
  • ajax:成功
  • ajax:完成
  • ajax:错误

因此,您的 js 应该如下所示:

$('#show_user_link').bind("ajax:success", function(evt, data, status, xhr){
  $('body').append(xhr.responseText);
})

【讨论】:

  • 试过了,但没用。 ajax 请求是自动生成的,因为我使用了 link_to 帮助器。我认为 RoR render :partial 辅助方法会自动呈现 html 模板。我很困惑,希望找到解决方案。
【解决方案2】:

将你的显示方法更改为:

def show
  @user = User.find(params[:id])
  respond_to do |format|
    format.js
  end
end

接下来,创建新文件 show.js.erb。然后,您必须确定要添加渲染的 div/section。在这种情况下,我必须

$("#users").html("<%= escape_javascript(render :partial => "userprofile", :locals => { :user => @user }) %>");

这只是 index.html.erb 中的示例:

<%= link_to "show user", show_user_path(user.id), method: :get, remote: true %>
<div id="users">
   <!-- will be replaced by partial user_profile !>
</div>

【讨论】:

  • 非常感谢!!那效果很好。我真希望没有 show.js.erb 也能完成,但这看起来是个不错的解决方案。
猜你喜欢
  • 2014-11-26
  • 2012-10-31
  • 1970-01-01
  • 2017-07-29
  • 2014-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多