コード少なくとも1つのネストされたオブジェクトの存在を検証する方法は?
class Survey < ApplicationRecord
has_many :questions, inverse_of: :survey, :dependent => :destroy
accepts_nested_attributes_for :questions
validates_associated :questions
end
class Question < ApplicationRecord
belongs_to :survey, inverse_of: :questions
validates_presence_of :survey
end
私の調査のコントローラー
def new
@survey = Survey.new
2.times {@survey.questions.build}
end
フォーム
<%= form_for @survey do |f|%>
<p>
<%= f.label :name%>
<%= f.text_field :name%>
</p>
<%= f.fields_for :questions do |builder|%>
<p>
<%= builder.text_area :content, rows: 3%>
</p>
<% end %>
<p><%= f.submit %></p>
<% end %>
ユーザーがアンケートを作成し、フォームの2つの質問を提供していたときにあなたが見ることができるように、私は、ユーザーが少なくとも供給したいです調査を作成するときに1つの質問。どのようにそれを達成することができますか?
私はこれを試していないが、多分 '検証しない:質問、存在を:true'には十分であろう。組み込みのレール検証が実際に存在をテストするかどうかは分かりません( 'self.questions.present?'のようなもの)。もしそうなら、それはうまくいくはずです – MrYoshiji
@MrYoshiji私は実際には、「検証:質問、存在:真」が働くとも考えています。私はカスタムの 'validate'をバリデーションのロジックをよりコントロールするために独占的に使用することをお勧めします –
@MrYoshiji私はまた 'validates:questions、presence:true'を試しましたが、うまくいきますが、私はAndrewDeinekoと同意します。 count –