到目前为止,我有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
答案 0 :(得分:1)
通过user association创建它。
def create
respond_to do |format|
if current_user.create_site(site_params)
format.html { ... }
# ...
else
# ...
end
end
end
如果网站是作为注册的一部分创建的,那么您无法在不创建网站关联的情况下创建用户,那么请在用户创建方法中的某个位置之后的某个位置抛出上述行。重新登录。
如果您在创建用户后没有登录并且他们必须从头开始登录,请在会话结束后将行放入您的登录方法(UserSession#create
或其他)中{{ 1}}可用,检查他们是否已经分配了一个,因此您不会破坏他们现有的网站。
答案 1 :(得分:0)
使用has_many和belongs_to rails时,为您提供构建方法。
current_user.sites.build(site_params)
答案 2 :(得分:-1)
对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