Rails ajax 除非我刷新页面,否则第一个请求不会出现
Rails ajax first request not showing up unless I refresh the page
我有一个视图,它有一个使用 Ajax 创建新 post 的表单,它还呈现所有 post 并添加新添加的 post 给他们。问题是当我 post 第一个 post 时,页面不显示它,除非我刷新,然后如果我刷新它就会显示,当我添加更多 posts Ajax 工作正常。
这里是视图 index.html.erb
:
<%= link_to('Logout', destroy_user_session_path, :method => :delete) %>
<%= link_to 'Edit my account', edit_user_registration_path %>
<%= form_tag search_posts_path, method: :get do %>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", name: nil %>
<% end %>
<b> Study requests </b>
<%= form_for(@post, remote: true) do |f| %>
<%=f.label :Course_name %>
<%=f.select :course_name, options_for_select(course_names) %><br/>
<%=f.label :Course_number %>
<%=f.select :course_number, options_for_select(course_numbers) %> <br/>
<%=f.submit %>
<% end %>
<%= render @posts %>
部分是 _post.html.erb
:
div id="post">
<%= post.user_name%>
</div>
控制器:
def index
@posts = Post.all.order('id DESC')
@post = Post.new
end
def create
@post = current_user.posts.build(post_params)
@post.save
respond_to do |format|
format.html { redirect_to @post, notice: "Study request successfully added" }
format.js {}
format.json { render json: @post, status: :created, location: @post }
end
end
最后是我的 create.js.erb
:
$("<%= escape_javascript(render @post) %>").prependTo("#post");
我明白了,我只需要像这样在我的部分渲染周围添加一个新的 div:
<ul id="container">
<%= render @posts %>
</ul>
并更改 create.js 以附加到此 div
我有一个视图,它有一个使用 Ajax 创建新 post 的表单,它还呈现所有 post 并添加新添加的 post 给他们。问题是当我 post 第一个 post 时,页面不显示它,除非我刷新,然后如果我刷新它就会显示,当我添加更多 posts Ajax 工作正常。
这里是视图 index.html.erb
:
<%= link_to('Logout', destroy_user_session_path, :method => :delete) %>
<%= link_to 'Edit my account', edit_user_registration_path %>
<%= form_tag search_posts_path, method: :get do %>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", name: nil %>
<% end %>
<b> Study requests </b>
<%= form_for(@post, remote: true) do |f| %>
<%=f.label :Course_name %>
<%=f.select :course_name, options_for_select(course_names) %><br/>
<%=f.label :Course_number %>
<%=f.select :course_number, options_for_select(course_numbers) %> <br/>
<%=f.submit %>
<% end %>
<%= render @posts %>
部分是 _post.html.erb
:
div id="post">
<%= post.user_name%>
</div>
控制器:
def index
@posts = Post.all.order('id DESC')
@post = Post.new
end
def create
@post = current_user.posts.build(post_params)
@post.save
respond_to do |format|
format.html { redirect_to @post, notice: "Study request successfully added" }
format.js {}
format.json { render json: @post, status: :created, location: @post }
end
end
最后是我的 create.js.erb
:
$("<%= escape_javascript(render @post) %>").prependTo("#post");
我明白了,我只需要像这样在我的部分渲染周围添加一个新的 div:
<ul id="container">
<%= render @posts %>
</ul>
并更改 create.js 以附加到此 div