【发布时间】:2016-12-01 08:44:38
【问题描述】:
我正在对 Rails 中的简单 ajax 示例进行简单变体:http://guides.rubyonrails.org/working_with_javascript_in_rails.html#a-simple-example
我正在尝试创建一个用户显示视图,在该视图中按下按钮会创建新帖子。这些帖子都列在同一显示页面上的用户下方,并在创建时出现。
帖子创建良好并在页面上正确显示,但是当我刷新页面时,我的
@post = User.posts.build()
覆盖所有以前创建的帖子,给每个帖子一个 nul id。 另外,将 create.js.erb 放在 views 文件夹中是否正确,还是应该放在 assets/javascripts 文件夹中?
这是我的文件:
用户控制器
def show
@user = User.find(params[:id])
@posts = Post.all
@post = @user.posts.build
end
用户/show.html.erb
<%= "user-id: #{@user.id}" %>
<ul id="posts">
<%= render :partial => @posts %>
</ul>
<%= form_for(@post, remote: true) do |f| %>
<%= f.hidden_field :user_id, :value => @user.id %>
<%= f.submit %>
<% end %>
PostsController
def create
puts params[:post][:user_id]
@user = User.find(params[:post][:user_id])
puts @user
@post = @user.posts.build()
respond_to do |format|
if @post.save
format.html { redirect_to @post, notice: 'Post was successfully created.' }
format.js {}
format.json { render json: @post, status: :created, location: @post }
else
format.html { render action: "new" }
format.json { render json: @post.errors, status: :unprocessable_entity }
end
Rails.logger.info(@post.errors.inspect)
end
end
def index
@posts = Post.all
@post = Post.new
end
posts/_post.html.erb
<li><%= @post.id %></li>
posts/create.js.erb
$("<%= escape_javascript(render @post) %>").appendTo("#posts");
【问题讨论】:
标签: javascript ruby-on-rails ajax