У меня есть модель пользователя и галереи и следующие ассоциации:
галерея.rb
attr_accessible :name, :description
belongs_to :user
пользователь.rb
has_one :gallery
Галерея создается через форму и не строится на создании пользователя (я делаю это, потому что некоторым пользователям не будет разрешено создавать галерею)
Вот контроллер галереи с действием создания:
galleries_controller.rb
def create
@gallery = Gallery.new(params[:gallery])
@gallery.user_id = current_user.id # save user_id to gallery
if @gallery.save
redirect_to @gallery, :notice => "Your gallery has been successfully created."
else
render :action => 'new'
end
end
1.) Мой первый вопрос:
когда я устанавливаю ассоциацию 1-к-1, подобную этой, пользователь может создать столько галерей, сколько захочет. Так разве это не действительно имеет «только» одну ассоциацию? (Я не думаю, что понимаю эту концепцию. Почему не возникает ошибка?)
2.) Мой второй вопрос:
Чтобы иметь только одну галерею для каждого пользователя, у меня была проверка user_id в модели галереи.
validates :user_id, :uniqueness => true
Это правильный способ избежать множества записей галереи, связанных с одним пользователем?
РЕДАКТИРОВАТЬ
Благодаря Рубену, я сделал это так:
контроллер
def new
if current_user.gallery == nil
@gallery = current_user.build_gallery
else
flash[:error] = "You already have a gallery"
end
end
def create
@gallery = current_user.build_gallery(params[:gallery])
if @gallery.save
redirect_to @gallery, :notice => "Your gallery has been successfully created."
else
render :action => 'new'
end
end
В представлении (new.html.erb)
<% if current_user.gallery == nil %>
<%= form ... %>
<% end %>
Проверка user_id не требуется