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

gallery.rb

attr_accessible :name, :description

belongs_to :user

user.rb

has_one :gallery 

通过表单创建一个库,它不是基于用户创建(我这样做是因为不允许某些用户创建一个库)

这是带有create动作的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.)我的第一个问题是:

当我像这样建立一对一的关联时,用户可以创建他想要的多个图库。 那么它不是真正的“唯一”一个联想吗? (我认为我没有得到这个概念。为什么没有出现错误?)

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验证

===============>>#1 票数:5

回答你的第一个问题: has_one真正做的是它将LIMIT 1子句附加到相应的sql查询,仅此而已。 这就是为什么,在您的情况下,用户可以创建任意数量的画廊。

===============>>#2 票数:3 已采纳

您可以检查新操作以查看用户是否已有图库,并重定向用户说他们已经有图库,或者提醒用户创建新图库会破坏其现有图库。 在后一种情况下,您还需要在创建操作中检查现有库并在保存新库之前将其删除,否则您将拥有无库画廊填充数据库。

在您的视图中,如果用户没有图库,您可以检查相同内容并仅显示新链接。

===============>>#3 票数:0

要回答第二个问题,可以为创建外键的迁移设置unique to true:

add_index:gallery,:user_id,unique:true

  ask by benoitr translate from so

未解决问题?本站智能推荐:

2回复

当模型具有另一个模型的一个或零个实例时,可以使用has_one关联吗?

RailsGuides说: http://guides.rubyonrails.org/association_basics.html一个has_many“关联表示模型的每个实例都有零个或多个另一个模型的实例。” “has_one关联还与另一个模型建立了一对一的连接,但语义(和后果)
4回复

在Rails中使用带有has_one关联的build

在此示例中,我创建了一个没有profile的user ,然后稍后为该用户创建一个profile 。 我尝试使用带有has_one关联的build,但是这个炸毁了。 我看到此工作的唯一方法是使用has_many 。 该user最多只能拥有一个profile 。 我一直在尝试。 我有:
1回复

具有has_one关联的嵌套模型

我有几个型号......用户模型,收集模型和灵感模型...... 收藏模型具有灵感 灵感模型属于一个集合 这是我的路线 这是我的InspirationController(它不是复数) 我对灵感的看法也是单一的(不是灵感) 在我一直使用Rails的过程
2回复

使用has_one关联进行查找的意外结果

我有一个has_one关联,用于公司实体上的位置: 公司实体的基础架构包含location_id属性。 我希望我能够像这样访问公司总部的位置信息: 但是,这将导致异常: 我对为什么这样做会感到困惑。 我希望FK位于公司中,而不是位置中(即SELECT * FROM l
1回复

has_one关联和嵌套形式

我有一个模型Post : 在routes.rb我有以下内容: 我要实现的是在使用form_for时启用草稿,即: ...其中@post和@draft是同一模型的不同实例。 现在,如果这样做,我会收到一个错误: 问题 :那么如何使表单生成带有edit_和new
1回复

Rails has_one关联设置

嗨,我刚接触Rails,并且已经与has_one关联进行了数小时的交流。 我有产品和皮肤,当我通过表格创建新产品时,我想使用选择框选择要与该产品关联的皮肤。 在皮肤表的模板列中保存了haml文件的名称之后,我想在/ skin / templates目录中使用haml文件来呈现产品。
1回复

Rails确定关联是否为has_one或has_many

想知道是否有一种简单的方法可以动态确定模型的关联是否为“ has_one ”或“ has_many ”关系(即这是一个对象或多个对象的关联)。 我使用的是MongoMapper,所以我能够检查如果一个类klass有一个相关的模型assoc通过一个或一对多的关系 但这看起来相当笨重,
1回复

是否可以通过使用表单的关联来附加/取消附加has_one?

我的模型如下所示: 出于这个问题的目的, Gallery.only_gallery提供了一个Gallery 。 我希望“ Photo ”表单包含一个复选框。 如果在提交表单时选中了该复选框,则照片将通过PhotoGallery模型与Gallery.only_gallery关联
3回复

RAILS:基于非PK列的has_one关联

我有以下表格: 我需要设置一个has_one关联('users'.type =>'types'.id)。 但是,据我了解,当我写类似的东西时: user.rb 它似乎在'users'.id和'types'.id之间建立了联系。 如何准确指定'users'.type
3回复

rails4 has_one与where查询的关联范围

我正在开发一个具有has_one关联(包括原材料记录)的产品模型。 该模型通过REST API返回数据。 我正在使用Active Model Serializer而不是JBuilder。 产品模型有一个“代码”字段,其中包含字符串中的产品代码: 两个代码之间的唯一区别是右数第三