Pergunta

No meu modelo, tenho os seguintes campos:

class Comment
  include Mongoid::Document

  field :author, type: String
  field :author_email, type: String
  field :author_url, type: String
  field :author_ip, type: String
  field :content, type: String

  validates :author, presence: true, length: { minimum: 4 }
  validates :content, presence: true, length: { minimum: 8 }
end

E também tenho um formulário para enviar os campos que o "comentarista" pode fornecer:

<%= form_for [@article, @article.comments.build] do |f| %>
  <div class='comment_content'>
    <%= f.text_area :content %>
  </div>

  <div class='comment_author_email'>
    <%= f.email_field :author_email %>
  </div>

  <div class='comment_author'>
    <%= f.text_field :author %>
  </div>

  <div class='comment_author_url'>
    <%= f.url_field :author_url %>
  </div>

  <div class='comment_submit'>
    <%= f.submit %>
  </div>
<% end %>

Os campos "autor" e "conteúdo" são necessários, os outros são preenchidos automaticamente (mas estão funcionando). O problema é que, quando um usuário não preenche o campo "URL", que é opcional, o modelo não salva o comentário. Seguindo meu controlador:

class CommentsController < ApplicationController
  def create
    @article = Article.find params[:article_id]
    @comment = @article.comments.create(comment_params)
    @comment.author_ip = request.remote_ip
    if @comment.save
      flash[:notice] = 'Comment published'
    else
      flash[:alert] = 'Comment not published'
    end
    redirect_to article_path(@article)
  end

  private
    def comment_params
      params.require(:comment).permit(:content, :author_email, :author, :author_url)
    end
end

O comentário não salva, mas nenhum "alerta" está definido, nem "aviso". Parece que apenas trava e pula todo o método. Só posso salvar o comentário se todos os campos forem preenchidos, caso contrário, ele falhará sem nenhuma mensagem.

o que estou perdendo?

Foi útil?

Solução

A primeira coisa que vem à mente é que você está salvando o comentário duas vezes por algum motivo. Primeiro você o salva ao usar @article.comments.create(comment_params) em vez de @article.comments.new(comment_params). Portanto, o primeiro salvamento falha sem flash.

Eu também recomendaria que você aplique alguns testes para ver o que não está funcionando ou pelo menos usando o debugger gem Sneek dentro do código em ação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top