2013-09-01 58 views
1

我正在嘗試在控制器內爲我的Request類創建一個新用戶,但遇到一些困難。以下是我的請求控制器中的「創建」操作。我意識到我不能只調用User.new,但我不確定如何構建正確的POST操作。在另一個控制器內創建操作

def create 
    @request = Request.new(params[:request]) 
    @user = User.find_by_email(@request.email) 
    if @user.present? 
    @request.user_id = @user.id 
    @request.save 
    else 
    user = User.new 
    user.email = @request.email 
    user.zip = @request.zip 
    user.save 
    @request.user_id = user.id 
    @request.save 
    end 

    respond_to do |format| 
    if @request.save 
     UserMailer.request_confirmation(@request).deliver 
     UserMailer.request_notification(@request).deliver 
     format.html { redirect_to confirmation_url } 
     format.json { render json: @request, status: :created, location: @request } 
    else 
     format.html { render action: "new" } 
     format.json { render json: @request.errors, status: :unprocessable_entity } 
    end 
    end 
end 
+0

您是否收到任何錯誤消息? – depa

+0

我錯過了什麼或爲什麼'Request'與'User'具有相同的屬性? (email,zip) –

+0

是的,你有兩種模式之間的關係嗎? – depa

回答

0

我不確定你的問題是什麼,但你不必調用用戶創建POST動作(來自用戶控制器的動作)來創建用戶。

User.create - 'create'是來自ActiveRecord :: Base的方法,而不是來自UserController。

在一個動作中(例如請求創建動作),您可以創建多個ActiveRecord對象,而不管它們是什麼類。

有多種方法可以在rails中創建數據庫實體。他們可以從模型,控制器和其他人中調用。

@u = User.new 
@u.save! # try to save object in DB, if something goes wrong, throws exception 

@u = User.create! # creates empty user object in database, '!' causes that if something goes wrong, create throws exception 

@u = User.create # it won't throw exception even if object is invalid 

@u = User.new 
@u.email = @request.email 
if @u.save 
    # ok, it's in DB 
else 
    # something goes wrong, e.g. rails validations 
end 
+0

這是請求控制器,而不是用戶控制器 –

相關問題