Вопрос по конструкции рельсов - PullRequest
1 голос
/ 25 июля 2011

У меня есть модель поста и модель комментария.Я хотел бы ограничить комментарии до 3. Как бы вы это сделали?

  1. Было бы лучше создать валидацию?Если да, то как бы это выглядело?

  2. Вы бы сделали это в представлении unless Post.comments == 3?

  3. Будет ли обратный вызов иметь смысл?1014 *

Ответы [ 4 ]

4 голосов
/ 25 июля 2011

проверка количества комментариев поста является обязанностью модели «Комментарий», поэтому я хотел бы предложить следующий код:

class Comment < ActiveRecord::Base
  belongs_to :post

  before_create :limit_number

  private
  def limit_number
    if post.comments.count >= 3
      errors.add(:post, "the limit of comments is over")
    end
  end
end

class Post < ActiveRecord::Base
  has_many :comments
end
3 голосов
/ 25 июля 2011

Вы должны всегда проверять как на уровне модели, так и на видах.

class Comment < ActiveRecord::Base

  belongs_to :post
  validate :check

  private

  def check
    if post.present?
      errors.add("Post", "can not have more than 3 comments") if post.comments.size >= 3
    end
  end

end

class Post < ActiveRecord::Base
  # other implementation...

  def commentable?
    comments.size <= 3
  end

end

Затем просто вызовите #commentable? в ваших представлениях, как это.Вы никогда не должны жестко кодировать значения в представлениях.

<% if @post.commentable? %>
  <%= render "form" %>
<% end %>
1 голос
/ 25 июля 2011

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

0 голосов
/ 25 июля 2011

Подтвердите это в моделях. Вы можете использовать validates_with, как описано здесь .

По вашему мнению, вам лучше проверить с неравенством , как

unless Post.comments.length >= 3
  show_form
end

Таким образом, если у вас есть четыре комментария по какой-либо причине (состояние гонки или администратор отправляет ответ после 3 и т. Д.), Форма не будет отображаться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...