加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Has_one关联应该是一个“只有”一个关联

发布时间:2020-12-17 02:53:31 所属栏目:百科 来源:网络整理
导读:我有一个User和Gallery模型以及以下关联: gallery.rb attr_accessible :name,:descriptionbelongs_to :user user.rb has_one :gallery 图库是通过表单创建的,而不是基于用户创建 (我这样做是因为不允许某些用户创建图库) 这是带有create动作的gallery控制器
我有一个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验证

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读