无法在Ruby on Rails中更新帖子

时间:2017-05-04 01:56:24

标签: ruby-on-rails

我正在制作一个类似于博客的应用程序,并且正在努力在编辑时更新帖子。

我使用一个名为_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

当我点击“发布”按钮时,它会将我重定向到正确的帖子,但它实际上不会使用我输入表单的新文本更新它。我觉得我有一些基本的东西,但是我不确定它是什么。

感谢任何帮助!

2 个答案:

答案 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