【问题标题】:How do I render partial via ajax in rails3 and jQuery如何在 rails3 和 jQuery 中通过 ajax 渲染部分内容
【发布时间】:2011-07-03 05:17:16
【问题描述】:

我可以在 rails 2 中这样做:

def show_rec_horses
  rec_horses = Horses.find(:all)
  page["allHorses"].replace_html :partial => "horses/recommended", :locals => 
 {:rec_horses => rec_horses}
end

如何在 Rails3 中使用 jQuery 执行此操作。那么如何在 Rails3 中用部分通过 ajax 调用(link_to :remote => true)替换我的 div 的 html。

我尝试过(在我的 show_rec_horses.js.erb 中):

$("#interactionContainer").update("<%= escape_javascript(render("horses/recommended"))%>");

什么也没有发生。我尝试了其他一些变体,但没有一个奏效。做错了什么?是否应该以其他方式解决这个问题?任何答案将不胜感激。

【问题讨论】:

    标签: ruby-on-rails-3 jquery


    【解决方案1】:

    好的,让我们从控制器开始。

    def show_rec_horses
      @rec_horses = Horses.find(:all)
    
      respond_to do |format|
        format.html # show_rec_horses.html.erb
        format.js   # show_rec_horses.js.erb
      end
    end
    

    这将确保为 html 请求或 javascript 请求呈现正确的模板。如果只需要响应一个 javascript 请求,请删除 html 部分。

    现在假设您有一个包含以下内容的页面:

    <p><%= link_to 'Show Horses', show_rec_horses_path, remote: true %></p>
    
    <div id="interactionContainer"></div>
    

    单击该链接将对控制器中的 show_rec_horses 操作发出请求,此操作将呈现 javascript 文件 show_rec_horses.js.erb

    这个 javascript 文件应该包含如下内容:

    $('#interactionContainer').html('<%=j render partial: 'horses/reccommended', locals: { rec_horses: @rec_horses } %>')
    

    现在您的容器将填充horses/_reccommended.html.erb 的内容,例如可以包含:

    <% rec_horses.all.each do |rec_horse| %>
      <p><%= rec_horse.name %></p>
    <% end %>
    

    【讨论】:

    • 谢谢,这对我很有帮助。
    • 在我删除“respond_to do |format|”之前对我不起作用阻止
    • 似乎可以按我的需要工作,但是在删除 format.html ajax 请求后失败并转到错误部分。应该去'show_rec_horses.js.erb',可能是因为rails 4但不适合我。
    • 一旦我克服了一件事,这对我很有帮助:我忘记了我需要一条 show_rec_horses 的路线。这部分可能不在这里,因为它对大多数熟悉 Rails 的人来说是显而易见的,但它可能对其他人有所帮助。
    猜你喜欢
    • 2014-05-31
    • 2011-11-03
    • 2020-04-01
    • 2015-04-30
    • 1970-01-01
    • 2012-11-15
    • 2011-10-17
    • 2011-07-24
    • 1970-01-01
    相关资源
    最近更新 更多