我正在尝试使用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>
答案 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。