我有一个 User 和一个 Gallery 模型以及以下关联:
画廊.rb
attr_accessible :name, :description
belongs_to :user
用户.rb
has_one :gallery
画廊是通过表单创建的,它不是基于用户创建的(我这样做是因为不允许某些用户创建画廊)
这是具有创建操作的画廊控制器:
画廊控制器.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.)我的第一个问题是:
当我设置像这样的一对一关联时,用户可以创建任意数量的画廊。那么它不是真正的“只有”一个协会吗?(我不认为我对此有概念。为什么没有引发错误?)
2.)我的第二个问题:
为了每个用户只有一个画廊,我对画廊模型中的 user_id 进行了验证
validates :user_id, :uniqueness => true
这是避免与一个用户关联的许多画廊记录的正确方法吗?
编辑
感谢 Reuben,我是这样写的:
控制器
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 验证