У меня есть сообщение has_many Комментарии. Post имеет атрибут boolean published
. Когда post.published
является ложным, новый комментарий не должен быть действительным. Какова наилучшая практика для такого рода проверки?Пользовательская проверка в Rails
Я попытался сделать это таким образом, но, к сожалению, он работает неправильно. По-прежнему можно создать новый комментарий для неопубликованного сообщения.
class Comment < ActiveRecord::Base
validates :post_id, presence: true, if: :post_is_published
...
def post_is_publised
post && post.published
end
end
Возможно, вы захотите взглянуть на [Object # try] (http://api.rubyonrails.org/classes/Object.html#method-i-try), чтобы высушить свой код до крошечного крошечного бита. – x1a4
Вы предлагаете 'post.try (: published)'? Не знал об этом, но уверен, делает его более ясным, спасибо. –
Да, у ActiveSupport есть несколько [довольно полезных вещей] (http://guides.rubyonrails.org/active_support_core_extensions.html), даже если он не очень хорошо документирован. – x1a4