我试图做到这一点,以便在创建新用户时(通过设计),如果不存在具有该名称的先前家庭模型,则将创建新的家庭(实质上是组)模型。
伪代码:
if Household.find(params[:household_name))
# allow current_user to join household
else
# create new Household model with User's household_name parameter
end
我已经使用controllers / registerhousehold_controller.rb从Devise :: RegistrationsController覆盖了基本用户控制器:
class RegisterhouseholdController < Devise::RegistrationsController
但我不确定如何在这里实施实际的创作。有什么建议吗?
答案 0 :(得分:1)
据我所知,控制器无需更改。
<强> User.rb 强>
after_create :create_or_join_to_household
def create_or_join_to_household
household = Household.find(params[:household_name])
if household.present?
self.join_to_household
else
Household.create(name: params[:household_name])
#or self.households.create(name: params[:household_name])
#if you have a household - user relation somehow
end
P.S。
join_to_household
将是您的用户模型中另一种创建household_users
关系的方法。
答案 1 :(得分:0)
简单 - 使用user
模型中的before_create
回调来构建对象,然后您可以在保存时使用它:
#app/models/user.rb
Class User < ActiveRecord::Base
before_create :set_household, if: Proc.new {|user| user.household_id.present? }
private
def set_household
if house = Household.find(self.household_id)
#if it is set
else
#create a new houshold
end
end
end
答案 2 :(得分:0)
在我之前的任务中,我必须在成功注册后调用自定义方法。 你也需要类似的东西。
我不确定是否会覆盖。
在App中试试这个。控制器
class ApplicationController < ActionController::Base
def after_sign_in_path_for(resource)
if Household.find(params[:household_name))
# allow current_user to join household
else
#create new Household model with User's household_name parameter
end
root_path
end
end
检查this