私のモデルには、次のフィールドがあります。
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
また、「コメント投稿者」が提供する可能性のあるフィールドを送信するためのフォームもあります。
<%= 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 %>
フィールド「作成者」と「コンテンツ」は必須で、他のフィールドは自動的に入力されます (ただし、機能しています)。問題は、オプションの「URL」フィールドにユーザーが入力しないと、モデルがコメントを保存しないことです。私のコントローラに続いて:
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
コメントの保存に失敗しましたが、「アラート」も「通知」も設定されていません。クラッシュしてメソッド全体をスキップするようです。すべてのフィールドが入力されている場合にのみコメントを保存できます。それ以外の場合は、メッセージなしで失敗します。
私は何が欠けていますか?