jquery - rails 3 : jquery to change partials

标签 jquery ruby-on-rails ajax ruby-on-rails-3

rails 新手,我想了解一些有关 jquery 的知识,所以我想尝试使用 AJAX 在部分 View 之间切换。

现在在我的用户的破折号上,我有一个指向他们的“喜欢”页面的链接,它需要完全重新加载才能看到“喜欢”页面,我如何更改它以使用 likes_user_path@user 刷新)?

views/pages/home.html.erb

  <div id="left">
    <div id="dash-statistics">
       <a href="<%= likes_user_path(@user) %>">
         <div id="likes" class="stat">Likes
           <%= @user.likes.count %>
         </div>
       </a>
    </div>
  </div>

  <div id="right">
    <div id="content">
    </div>
  </div>

用户 Controller

  def likes
    @title = "Likes"
    @user = User.find(params[:id])
    @like_stuff = @user.likes.paginate(:page => params[:page])
    render 'show_likes' 
  end

最佳答案

据我了解,您希望通过使用 ajax 在用户仪表板中单击链接来重新加载点赞

首先要做的是重写链接,并添加 :remote => true ,如下所示:

<%= link_to "Likes", likes_user_path(@user), :remote => true %>

然后,在你的 Controller 中,确保顶部有一个 respond_to :html, :js (当然可以有其他选项,但 :js 有成为其中之一)

之后,您可以在 Controller 中执行一个名为 likes 的函数,用于加载喜欢的内容,它看起来像您的,只是您不执行 render 最后,但是 respond_with @likes。通过在 respond_to 过滤器中添加 :js,Rails 将在需要时自动采取相应的行动。

接下来,创建一个名为 likes.js.erb 的相应 View (我不确定在这种情况下 CoffeeScript 是否可以开箱即用),在其中放置类似的内容

$('#likes').html('<%= escape_javascript(render "likes", :likes => @likes) %>');

这假设在您想要渲染点赞的主视图中,有一个带有 id=likes 的元素,如下所示:

<div id="likes">
  <%= render "likes", :likes => @likes %>
</div>

还有一个 _likes.html.erb 部分,用于渲染点赞

<% likes.each do |like| %>
  <div>
    <%= like.name %>
  </div>
<% end %>

至此,我想我已经基本涵盖了它。

关于jquery - rails 3 : jquery to change partials,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7865198/

相关文章:

javascript - 如何使用 Jquery(或 Javascript)替换表格中的文本?

jquery如何动态着色区域

php - 使用 Javascript OnChange 对 MySQL 查询进行下拉排序?

javascript - jquery ui droppable 的贪婪设置不起作用?

javascript - 未找到外部 JS 中的变量 -- 顺序正确

ruby-on-rails - 不使用 Outlook 发送实际的 Outlook session 请求

ruby-on-rails - 验证特定操作的模型

ruby-on-rails - 如何从单个模型/表中提取分组结果并提供给 View

javascript - 尝试使用 Web Speech API 从 Google 图片获取内容时出现 500 服务器错误

javascript - RxJS:如何用 nock 测试 Observable.ajax() ?