Если вы хотите дать пользователю возможность создать одну или несколько групп во время создания человека, а затем подтвердить, что эти группы были созданы, укажите это.В противном случае оставшаяся часть этого ответа будет посвящена созданию лица и проверке его связи по крайней мере с одной существующей группой.
Если вы спрашиваете, как проверить наличие связи группы людей натаблицы присоединения к groups_people, это может быть сделано с помощью странных SQL-запросов и нецелесообразно.Просто верьте, что хорошо протестированный ActiveRecord работает правильно.
Однако вы можете проверить существование одной или нескольких групп в записи Person перед ее сохранением.
Пока вы мигрировали таблицу соединений под названием groups_people:
# db/migrate/xxxxxxxxxxxxxx_create_groups_people
class CreateGroupsPeople < ActiveRecord::Migration
def change
create_table :groups_people, :id => false do |t|
t.string :group_id, :null => false
t.string :person_id, :null => false
end
end
end
# $ rake db:migrate
, и ваш контроллер верен:
# app/controllers/people_controller.rb
class PeopleController < ApplicationController
def new
@groups = Group.all
@person = Person.new
end
def create
@person= Person.new(params[:person])
if @person.save
# render/redirect_to and/or flash stuff
else
# render and/or flash stuff
end
end
end
, и у вас есть все существующие параметры группы в виде флажков:
# app/views/people/new.html.erb
<%= form_for @person do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
# same for other person attributes
<% @groups.each do |g| %>
<%= check_box_tag 'person[group_ids][]', g.id, false, :id => g.group_name_attr %>
<%= label_tag g.group_name_attr %>
<% end %>
<%= f.submit 'Create!' %>
<% end %>
, затем вы можете проверить наличиегрупп в вашей записи Person:
class Person < ActiveRecord::Base
validates_presence_of :groups
has_and_belongs_to_many :groups
end
Существует validates_associated helper , но в этом случае нет необходимости, когда вы указываете Group.all как флажки.
Для этого не требуется accept_nested_attributes_for.Это было бы, если бы вы создавали группу для человека при создании человека.Опять же, уточните, если это так.
Просто примечание: проверка входящей формы, включающей Group.all в качестве параметров и , дает возможность создать группу вместе с человеком, но это возможно, но сложно.Это будет включать обход существующих проверок модели группы, если таковые имеются, которые, вероятно, есть.