带有Rails的Ajax,附加div不起作用

时间:2015-03-01 14:06:59

标签: javascript jquery html ruby-on-rails ajax

我正在尝试使用AJAX将div附加到我的HTML中,系统是在rails中开发的。 这是js.erb文件的内容:

$('.posts').append("<%= j render 'post', posts: @post %>")

我真的知道我的代码正在调用此文件,因为如果我将这些行更改为alert.('Hello'),则会在我的网络浏览器上显示警报。

问题在于没有添加div。

以下是我的_post.html.erb

的代码
<%= div_for @posts do %>
  <p><b>Posted <%= time_ago_in_words(post.created_at) %> ago </b></p>
  <p><%= post.message %></p>
<% end %>

终端或浏览器检查器中未显示任何错误。

[编辑1]我现在在chrome编辑器中看到,服务器正在向客户端发布一个ajax。内容是:

   $('.posts').append("")

好像渲染不渲染,我的代码出了什么问题?

[EDIT2]

控制器代码如下。调用ajax的方法是create。 我不知道这是否更容易看到,但所有这个项目也在github上:

https://github.com/ricardovsilva/twitter-rubyOnRails/

class PostsController < ApplicationController
    def index
        @posts = Post.order('created_at desc')
        #respond_to :html
    end

    def create
        @post = Post.create(:message => params[:message])
        respond_to do |format|
            if @post.save
                format.html { redirect_to posts_path }
                format.js
            else
                flash[:notice] = "Message failed to save."
                format.html { redirect_to posts_path }
            end
        end
    end
end

HTML是:

index.html.erb

<%= render partial: "message_form" %>
<div id="posts">
    <%= render partial: @posts %>
</div>      

_message_form.html.erb

<%= form_tag("/posts", remote: true) do %>
    <%= label_tag(:message, "What are you doing?")%><br>
    <%= text_field_tag(:message, nil, size: "44x6") %><br>
    <%= submit_tag("Update") %><br>
<% end %>

_post.html.erb (这是我正在尝试渲染并发送到客户端的那个)

<%= div_for @posts do %>
     <p><b>Posted <%= time_ago_in_words(post.created_at) %> ago </b></p>
     <p><%= post.message %></p>
 <% end %>

layouts / application.html.erb (这里是我试图通过ajax添加渲染的div)

<!DOCTYPE html>
<html>
<head>
  <title>Twitter</title>
  <%= stylesheet_link_tag    'application', media: 'all', 'data-turbolinks-track' => true %>
  <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
  <%= csrf_meta_tags %>
</head>
<body>

<div id="content"> 
    <%= yield %>
</div>

</body>
</html>

2 个答案:

答案 0 :(得分:1)

$('#posts').append("<%= j render 'post', post: @post %>")是解决您问题的方法。 _post.html.erb也必须是:

 <%= div_for post do %>
   <p><b>Posted <%= time_ago_in_words(post.created_at) %> ago </b></p>
   <p><%= post.message %></p>
 <% end %>

答案 1 :(得分:0)

在您的情况下,您应使用to string方法呈现post模板render_to_string