2013-12-15 83 views
0

我有2個模型,用戶和common_apps。將has_many關聯的方法轉換爲has_one關聯

用戶has_one:common_app。

在此之前,我將代碼編寫爲用戶has_many common_apps,但我不確定如何重寫has_one關聯。主要的困惑是如何在common_app控制器中構造「新」。

當我嘗試時,我得到一個未定義的方法錯誤。

undefined method `new' for #<CommonApp:> 

這是我的代碼 - >

def new 
    if current_user.common_app.any? 
     redirect_to current_user 
    else 
     @common_app = current_user.common_app.new 
    end 
    end 

    def create 
    @common_app = current_user.common_app.build(common_app_params) 
    if @common_app.save 
     flash[:success] = "Common App Created!" 
     redirect_to root_url 
    else 
     redirect_to 'common_apps/new' 
    end 
    end 

    def show 
    @common_apps = current_user.common_app 
    end 

你將如何重組這一點,如果這是一個HAS_ONE關聯?

我想我知道應該怎樣「創造」是 - >

 def create 
     @common_app = current_user.build_common_app(common_app_params) 
     if @common_app.save 
      flash[:success] = "Common App Created!" 
      redirect_to root_url 
     else 
      redirect_to 'common_apps/new' 
     end 
     end 
+0

嗨Fivedigit,編輯答案,以反映它實際上是一個未定義的方法錯誤以及 –

回答

0

你的新動作應該是這樣的:

def new 
    if current_user.common_app.present? 
    redirect_to current_user 
    else 
    @common_app = current_user.build_common_app 
    end 
end 

您也可以撥打build_common_app沒有傳遞任何參數它將爲current_user初始化一個空的CommonApp。