在文章页面上创建的注释未保存到数据库

时间:2017-07-31 13:33:29

标签: ruby-on-rails ruby ruby-on-rails-5

不确定为什么在_comment_form.html.erb上创建的评论未在文章/:id

上呈现

我正在引用此youtube教程:https://www.youtube.com/watch?v=IUUThhcGtzc

评论控制员:

class CommentsController < ApplicationController
  before_action :authenticate_user!
  before_action :set_article

  def create
    @comment = @article.comments.create(params[:comment].permit(:content, :article_id, :user_id))
    @comment.user = current_user
    @comment.save
    if @comment.save
      redirect_to @article
    else
      redirect_to @article
    end
  end

  private

    def set_article
      @article = Article.find(params[:article_id])
    end

end

文章控制者:

class ArticlesController < ApplicationController
    before_action :authenticate_user!, except: [:index, :show]
    before_action :set_article, only: [:show, :edit, :update, :destroy]

  def show
    @comments = Comment.where(article_id: @article).order("created_at DESC")
  end

  private

    def set_article
      @article = Article.find(params[:id])
    end
end

_comment.html.erb(来自articles / show.html.erb)

    <%= render 'comments/comment_form' %>

    <% @comments.each do |comment| %>
       <%= comment.content %>
    <% end %>

_comment_form.html.erb

<% if user_signed_in?  %>
  <%= form_for ([@article, @article.comments.build]) do |f| %>
    <div class="form-group">
      <%= f.label :content %>
      <%= f.text_area :content, class: 'form-control' %>
    </div>

    <%= f.submit 'Post Comment', class: 'btn btn-primary' %>
  <% end %>
<% end %>

的routes.rb

  resources :articles do
    resources :comments
  end

1 个答案:

答案 0 :(得分:0)

我想做的一些考虑因素:

@comment.save
if @comment.save

当你这样做时,你会节省两次。调用@comment.save if条件是否已保存文章,如果成功则返回truefalse。另外,将.save替换为.save!,因此如果不保存则会引发异常,因此您可以在rails服务器日志中检查原因。

另外,认为没必要这样做:

@comments = Comment.where(article_id: @article).order("created_at DESC")

由于您已经设置了@article,因此您可以在文章模型上放置@article.comments后访问has_many :comments

如果文章创建正确,您还可以在rails控制台上查看。创建一个新的,并将其设置为article = Article.last,然后您可以检查article.comments

希望这有帮助!