Вопрос

В моей модели у меня есть следующие поля:

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

Комментарий не может сохранить, но не установлено «оповещение», ни «уведомление». Похоже, это просто сбои и пропускает весь метод. Я могу сохранить комментарий только в том случае, если каждое поле будет заполнено, иначе оно не удастся без какого -либо сообщения.

Что мне не хватает?

Это было полезно?

Решение

Первое, что приходит на ум, это то, что вы по какой -то причине сохраняете комментарий дважды. Сначала вы сохраняете его при использовании @article.comments.create(comment_params) вместо этого @article.comments.new(comment_params). Анкет Таким образом, первое сохранение не удается без вспышки.

Я также рекомендовал бы вам применять некоторые тесты, чтобы увидеть, что не работает или, по крайней мере, используя debugger gem Чтобы Sneek внутри кода в действии.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top