2013-03-07 56 views
0

我想讓它在應用中創建新用戶時,所有內容都已經爲其設置。例如。他們有一個文件夾,他們保存筆記。因此,在他們保存任何註釋之前,不必點擊鏈接到一個新文件夾,而是點擊一個提交按鈕來創建它,是否有可能在創建用戶帳戶時自動爲它們設置一個?Rails - 在創建新用戶時創建其他類的新實例

E.g.

users_controller.rb:

def create 
    @user.password = params[:password] 
    respond_to do |format| 
     if @user.save 
     @folder = @user.folder.new(params[:folder]) # this is the line that I'm unsure how to implement 

     format.html { redirect_to @user, notice: 'User was successfully created.' } 
     format.json { render json: @user, status: :created, location: @user } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @user.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

SOLUTION:

由於我使用的設計,我增加了我的用戶控制器路由漸漸覆蓋,因此該解決方案(也有可能以更好的方法這樣做!)是將代碼添加到註冊控制器中的after_user_sign_up_path,然後它執行正常。

回答

0

在您的操作中,您使用參數@user和。

我會建議使用nested_attributes

class User 
    has_one :folder 
    accepts_nested_attributes_for :folder 
end 

然後,你可以寫你的操作是這樣的:

def create 
    @user.update_attributes(params[:user]) 
    respond_to do |format| 
    if @user.save 
     # Here the folder is already saved! 

     format.html { redirect_to @user, notice: 'User was successfully created.' } 
     format.json { render json: @user, status: :created, location: @user } 
    else 
     format.html { render action: "new" } 
     format.json { render json: @user.errors, status: :unprocessable_entity } 
    end 
    end 
end 

的應該有很多優勢(雖然我還沒有檢查了所有的),其中:

  • 不要」如果沒有文件夾保存@user(如果文件夾保存失敗,用戶保存失敗)
  • @ user.errors應包含兩個驗證錯誤@user

但要做到這一點,您應該爲您的PARAMS不同的結構(這是很容易實現與fields_for):

user: 
    password: "Any password" 
    folder_attributes: 
    any_attribute: "Any value" 
+0

您好,感謝的是,看起來將簡化該過程 - 但是,用戶得到保存,但不是一個新的文件夾?我使用的設計進行用戶驗證,因此可能不會是註冊控制器某處覆蓋它?雖然,在註冊控制器的唯一內容是after_sign_in_path等我並沒有改變任何東西,雖然到fields_for使用 - 做我需要做的,以獲得nested_attributes工作?謝謝! – ecs 2013-03-07 19:48:13

+0

我已經接受了這個答案,因爲我認爲它會做什麼,我想對於大多數應用程序 - 然而,在這種情況下,我用我已經加入到原來的問題的情況下,任何人也有類似的問題我一個替代的解決方案。 – ecs 2013-03-07 21:01:53

相關問題