En mi modelo tengo los siguientes 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
Y también tengo un formulario para enviar los campos que el "comentarista" puede proporcionar:
<%= 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 %>
Se requieren los campos "autor" y "contenido", los otros se llenan automáticamente (pero funcionan). El problema es que cuando un usuario no llena el campo "URL", que es opcional, el modelo no guarda el comentario. Siguiendo mi 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
El comentario no puede guardar, pero no se establece "alerta", ni "aviso". Parece que solo se bloquea y omite todo el método. Solo puedo guardar el comentario si se llena cada campo, de lo contrario fallará sin ningún mensaje.
¿Qué me estoy perdiendo?