2016-11-16 83 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)