我正在制作一个类似于博客的应用程序,并且正在努力在编辑时更新帖子。
我使用一个名为_post_form的部分来编辑帖子:
<%= form_for(@post) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<div class="field">
<%= f.text_area :content, placeholder: "Compose new post..." %>
</div>
<div id="post_button">
<%= f.submit "Post", class: "btn btn-primary" %>
</div>
<% end %>
来自我的帖子控制器的相关代码:
class PostsController < ApplicationController
before_action :find_note, only: [:show, :edit, :update]
def update
redirect_to @post
end
def find_note
@post = Post.find(params[:id])
end
当我点击“发布”按钮时,它会将我重定向到正确的帖子,但它实际上不会使用我输入表单的新文本更新它。我觉得我有一些基本的东西,但是我不确定它是什么。
感谢任何帮助!
答案 0 :(得分:1)
您在update
操作中缺少模型PostsController#update
来电,这就是您的帖子记录未获得更新的原因。在重定向PostsController#update
操作
def update
@post.update(post_params) ## <- add this
redirect_to @post
end
注意:假设您使用的是Rails版本&gt; = 4并且post_params
中有白名单属性(强参数)。
答案 1 :(得分:1)
您没有更新控制器中的任何内容,只是将用户重定向到post
视图。
首先获取post
的新值:
def post_params
params.require(:post).permit(:content)
end
然后在重定向之前更新它:
def update
@post.update(post_params)
redirect_to @post
end
总而言之,你的控制器应该是这样的:
class PostsController < ApplicationController
before_action :find_note, only: [:show, :edit, :update]
def update
@post.update(post_params)
redirect_to @post
end
private
def post_params
params.require(:post).permit(:content)
end
def find_note
@post = Post.find(params[:id])
end
end