2016-11-16 41 views
0

到目前为止,我有user belongs_to :sitessite has_many :users。我在用户架构中的站点架构和site_id中有user_id在控制器中创建新站点时分配用户site_id。

我试图设置它,一旦用户创建一个新的网站,比那个site_id被分配给该用户。并且每个用户只能创建一个站点。

我试过@user.site_id = Site.find(params[:id])在sites_controller.rb中,但没有运气。

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

我认为你想要注册后为什么你在网站使用sites_controller.rb – Sunny

回答

-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 
1

通过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可用,检查他们还没有分配一个,所以你不要破坏他们现有的网站。

+0

该网站不创建作为注册的一部分。现在,用户必须登录才能创建一个站点。 因此,我会将current_user.site_id = @ site.id放在我的会话控制器或站点控制器的“创建”部分中? – Raidspec

+0

然后像我的第一个例子那样在网站控制器中进行。 – Eric

0

当您使用has_many和belongs_to rails为您提供构建方法时。

current_user.sites.build(site_params)