如何验证至少一个嵌套对象的存在?

Emm*_*ali 3 ruby ruby-on-rails

代码

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
Run Code Online (Sandbox Code Playgroud)

我的调查控制器

def new
    @survey = Survey.new
    2.times {@survey.questions.build}
end
Run Code Online (Sandbox Code Playgroud)

形式

    <%= 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 %>
Run Code Online (Sandbox Code Playgroud)

正如您在用户创建调查时所看到的,表单提供了两个问题,我希望用户在创建调查时至少提供一个问题。怎么可能实现???

Dav*_*vid 5

你可以只测试数组的长度,然后简单地做:

validates :questions, length: {minimum: 1, message: 'should have at least 1 question defined.'}
Run Code Online (Sandbox Code Playgroud)