在控制器中创建新站点时为用户分配 site_id。
Assigning user a site_id on creating a new site in controller.
到目前为止我有 user belongs_to :sites
和 site has_many :users
。我在站点架构中有 user_id
,在用户架构中有 site_id
。
我正在尝试将其设置为在用户创建新站点后将 site_id 分配给该用户。每个用户只能创建一个站点。
我在 sites_controller.rb 中尝试过 @user.site_id = Site.find(params[:id])
,但没有成功。
sites_controller.rb
def create
@site = Site.new(site_params)
@site.user_id = current_user.id
respond_to do |format|
if @site.save
format.html { redirect_to @site, notice: 'Site was successfully created.' }
format.json { render :show, status: :created, location: @site }
else
format.html { render :new }
format.json { render json: @site.errors, status: :unprocessable_entity }
end
end
end
registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController
respond_to :json
def create
build_resource(sign_up_params)
resource.save
yield resource if block_given?
if resource.persisted?
if resource.active_for_authentication?
message = find_message(:signed_up)
flash[:notice] = message
sign_up(resource_name, resource)
if request.xhr?
return render :json => {:success => true, :data => {:message => message}}
else
respond_with resource, location: after_sign_up_path_for(resource)
end
else
message = find_message(:"signed_up_but_#{resource.inactive_message}" )
expire_data_after_sign_in!
if request.xhr?
return render :json => {:success => true, :data => {:message => message}}
else
respond_with resource, location: after_inactive_sign_up_path_for(resource)
end
end
else
clean_up_passwords resource
messages = resource.errors.messages
if request.xhr?
return render :json => {:success => false, :data => {:message => messages}}
else
respond_with resource
end
end
end
def sign_up_params
params.require(:user).permit(:email, :password, :password_confirmation)
end
end
通过 user association 创建它。
def create
respond_to do |format|
if current_user.create_site(site_params)
format.html { ... }
# ...
else
# ...
end
end
end
如果站点是作为注册的一部分创建的,因为如果不创建他们的站点关联就无法创建用户,那么将上面的行放在用户创建方法中他们签名的点之后的某个位置英寸
如果您在创建用户后没有登录,而他们必须从头开始登录,请在会话结束后将此行放入您的登录方法(UserSession#create
或其他)并且 current_user
可用,检查他们是否已经分配了一个,这样您就不会破坏他们现有的站点。
当您使用has_many和belongs_to时rails为您提供构建方法。
current_user.sites.build(site_params)
对 sites_controller.rb 执行此操作将为 current_user.site_id 提供刚刚创建的 @site.id。
def create
@site = Site.new(site_params)
@site.user_id = current_user.id
respond_to do |format|
if @site.save
format.html { redirect_to @site, notice: 'Site was successfully created.' }
format.json { render :show, status: :created, location: @site }
else
format.html { render :new }
format.json { render json: @site.errors, status: :unprocessable_entity }
end
end
if current_user.site_id.blank?
current_user.site_id = @site.id
current_user.save
end
end
到目前为止我有 user belongs_to :sites
和 site has_many :users
。我在站点架构中有 user_id
,在用户架构中有 site_id
。
我正在尝试将其设置为在用户创建新站点后将 site_id 分配给该用户。每个用户只能创建一个站点。
我在 sites_controller.rb 中尝试过 @user.site_id = Site.find(params[:id])
,但没有成功。
sites_controller.rb
def create
@site = Site.new(site_params)
@site.user_id = current_user.id
respond_to do |format|
if @site.save
format.html { redirect_to @site, notice: 'Site was successfully created.' }
format.json { render :show, status: :created, location: @site }
else
format.html { render :new }
format.json { render json: @site.errors, status: :unprocessable_entity }
end
end
end
registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController
respond_to :json
def create
build_resource(sign_up_params)
resource.save
yield resource if block_given?
if resource.persisted?
if resource.active_for_authentication?
message = find_message(:signed_up)
flash[:notice] = message
sign_up(resource_name, resource)
if request.xhr?
return render :json => {:success => true, :data => {:message => message}}
else
respond_with resource, location: after_sign_up_path_for(resource)
end
else
message = find_message(:"signed_up_but_#{resource.inactive_message}" )
expire_data_after_sign_in!
if request.xhr?
return render :json => {:success => true, :data => {:message => message}}
else
respond_with resource, location: after_inactive_sign_up_path_for(resource)
end
end
else
clean_up_passwords resource
messages = resource.errors.messages
if request.xhr?
return render :json => {:success => false, :data => {:message => messages}}
else
respond_with resource
end
end
end
def sign_up_params
params.require(:user).permit(:email, :password, :password_confirmation)
end
end
通过 user association 创建它。
def create
respond_to do |format|
if current_user.create_site(site_params)
format.html { ... }
# ...
else
# ...
end
end
end
如果站点是作为注册的一部分创建的,因为如果不创建他们的站点关联就无法创建用户,那么将上面的行放在用户创建方法中他们签名的点之后的某个位置英寸
如果您在创建用户后没有登录,而他们必须从头开始登录,请在会话结束后将此行放入您的登录方法(UserSession#create
或其他)并且 current_user
可用,检查他们是否已经分配了一个,这样您就不会破坏他们现有的站点。
当您使用has_many和belongs_to时rails为您提供构建方法。
current_user.sites.build(site_params)
对 sites_controller.rb 执行此操作将为 current_user.site_id 提供刚刚创建的 @site.id。
def create
@site = Site.new(site_params)
@site.user_id = current_user.id
respond_to do |format|
if @site.save
format.html { redirect_to @site, notice: 'Site was successfully created.' }
format.json { render :show, status: :created, location: @site }
else
format.html { render :new }
format.json { render json: @site.errors, status: :unprocessable_entity }
end
end
if current_user.site_id.blank?
current_user.site_id = @site.id
current_user.save
end
end