【问题标题】:Rendering partial with ajax in Rails 3在 Rails 3 中使用 ajax 渲染部分
【发布时间】:2013-03-06 09:16:21
【问题描述】:

我有一个简单的应用程序,其中包含有许多 cmets 的帖子。

我可以使用以下形式从 posts#show 创建 cmets。

<%= form_for @comment, :remote => true, :html => {:'data-type' => 'html', :id =>                 'create_comment_form' }, :'data-update-target' => 'comments-container'$
    <%= f.text_area :content %>
    <%= f.hidden_field :post_id, :value => @post.id %>
    <%= f.submit 'Submit', :disable_with => 'Please wait...', :class => 'submit' %>
<% end %>

然后我用

显示 cmets
<div id="comments-container">
  <%= render "posts/comments"  %>
</div>

循环通过@post.cmets。

提交表单时是否可以更新@post.cmets 并重新渲染部分内容?

【问题讨论】:

    标签: ruby-on-rails ajax


    【解决方案1】:

    您目前是否从您的 posts#create 操作中呈现任何内容?无论哪种方式,您都需要像@jvnill 所说的那样呈现create.js.erb(在app/views/posts/ 中创建此文件):

    def create
      # do your thang..
      respond_to do |format|
        format.js do
          # any stuff you want to do when responding to JS
        end
      end
    end
    

    这会自动渲染create.js.erb,应该是这样的:

    $('#comments-container').html('<%= escape_javascript(render "posts/comments") %>');
    

    编辑-您遇到了render 描述的问题,因为您尝试从资产进行渲染。把它放在你的views目录中。

    【讨论】:

      【解决方案2】:

      这是可以做到的。在create.js.erb,试试

      $('#comments-container').html('#{escape_javascript render('posts/comments')}')
      

      确保声明了您在分部中使用的任何实例变量。

      更新:更好的方法是在 div 的末尾附加注释。

      【讨论】:

      • $("#cmets-container").html(" "posts/cmets") ) %>");导致#:0x00000003515dd0> 的未定义方法“渲染”
      • 我想我会将 cmets 作为 json 返回并附加它,这样做的缺点是您失去了使用部分格式化 cmets 的好处
      • 不,您仍然可以对 cme​​ts 使用部分。在posts/comments 中,使用部分渲染每个评论,然后使用该部分附加到 div。至于你的错误,你得到那个很奇怪。
      猜你喜欢
      • 2013-06-19
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2012-10-16
      • 2023-03-11
      相关资源
      最近更新 更多