gpt4 book ai didi

ruby-on-rails - Has_one 关联应该是一个 has "only"一个关联

转载 作者:行者123 更新时间:2023-12-04 07:28:44 25 4
gpt4 key购买 nike

我有一个 User 和一个 Gallery 模型以及以下关联:

画廊.rb

attr_accessible :name, :description

belongs_to :user

用户名
has_one :gallery 

图库是通过表单创建的,它不是建立在用户创建的基础上的
(我这样做是因为不允许某些用户创建图库)

这是带有创建操作的画廊 Controller :

画廊 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.) 我的第一个问题是:

当我建立像这样的一对一关联时,用户可以创建任意数量的画廊。那么它不是真正的“只有”一个关联吗? (我不认为我明白这个概念。为什么没有出现错误?)

2.) 我的第二个问题:

为了每个用户只有一个画廊,我对画廊模型中的 user_id 进行了验证
validates :user_id, :uniqueness => true

这是避免与一个用户关联的许多图库记录的正确方法吗?

编辑

感谢鲁本,我是这样写的:

Controller
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

在 View 中 (new.html.erb)
<% if current_user.gallery == nil %>
<%= form ... %>
<% end %>

不需要 user_id 验证

最佳答案

关于您的第一个问题:什么 has_one确实是它附加了 LIMIT 1子句到相应的 sql 查询,仅此而已。这就是为什么在您的情况下,用户可以根据需要创建任意数量的画廊。

关于ruby-on-rails - Has_one 关联应该是一个 has "only"一个关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8474897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com