![](/img/trans.png)
[英]Ruby on Rails5/ cancancan/ devise - Implementing access restrictions for different kind of users (i.e. making user A see different pages than user B)
[英]With ruby on rails and devise, how to create another model instance belonging to a user that has just registered (i.e. for the first time)?
我一直在寻找几个小时,以便找到解决以下问题的最佳做法:每次有新用户(使用devise)在我的应用上注册时,我都想创建3个默认的愿望清单,这些清单将属于该新用户,以便他/她可以稍后再填写。
class User < ActiveRecord::Base has_many :wishlists, dependent: :destroy end class Wishlist < ActiveRecord::Base belongs_to :user end
我已经阅读了一些主题相似的帖子,但从未满足我的需要,尤其是不修改注册表格并获取user_id以便正确创建关联的愿望清单。
因此,如果有人遇到相同的问题,这是我最终使用的解决方案(以下为答案)。
是否存在更好的做法? 很高兴阅读您的想法。
想必您的用户注册时会创建新的user
记录吗? 如果是这样,我会将您的功能作为回调放入user
模型中。
class User < ActiveRecord::Base
has_many :wishlists, dependent: :destroy
after_create :build_default_wishlists
def build_default_wishlists
self.wishlists << Wishlist.new(title: 'Hotels')
self.wishlists << Wishlist.new(title: 'Food & Drinks')
self.wishlists << Wishlist.new(title: 'Sightseeing')
end
...
end
我使用的解决方案是通过以下方式覆盖Devise Registration控制器:
class Users::RegistrationsController < Devise::RegistrationsController protected def after_sign_up_path_for(resource) hotels = Wishlist.create!(title: 'Hotels', user: User.find(resource.id)) restaurants = Wishlist.create!(title: 'Food & Drinks', user: User.find(resource.id)) sightseeing = Wishlist.create!(title: 'Sightseeing', user: User.find(resource.id)) root_path end end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.