2013-03-06 35 views
0

我有3個型號。用戶有多個投資組合和投資組合擁有多個資產。如何選擇3模型系統中的當前模型?

當用戶登錄時,通過find_by_id使他成爲current_user。他們第一次註冊時,會爲他們創建一個投資組合。這成爲current_portfolio。

接下來,他們可以創建投資組合,將他們重定向到他們所有投資組合的清單。點擊每個鏈接將使該組合成爲current_portfolio。

@current_portfolio = current_user.portfolios.find_by_id(params[:id]) 

的投資組合顯示視圖擁有資產的形式,使他們能夠迅速補充資產投資組合。這是我卡住的地方。由於資產表單位於資產組合show視圖中,我的資產控制器需要引用current_portfolio,但這是在我的投資組合控制器中。

組合控制器:

def show 
    @current_portfolio = current_user.portfolios.find_by_id(params[:id]) 
    @asset = @current_portfolio.assets.build 
end 

當提交表單時,它進入我的資產控制器Create功能。 Create不能簡單地擁有@current_portfolio,因爲它位於不同的控制器上。我也不能使用find_by_id(params[:id]),因爲:id沒有提供任何東西。

當我有3個模型時,如何引用第二個模型? (對不起,我是一個新手...)

編輯更新:我以爲我找到了解決方案,但意識到它沒有奏效。

我在表單傳遞<%= hidden_field_tag :portfolio_id, params[:id]%>並設置我的資產控制器創建要

def create 
    @asset = Asset.new(params[:asset]) 
    @asset.save 
end 

,但它沒有得到portfolio_id這是在我的模型必填字段。在我看來

賽程表

<%= form_for(@asset) do |f| %> 
     <%= hidden_field_tag :portfolio_id, params[:id]%> 
     <%= f.text_field :asset_symbol %> 
     <%= f.text_field :shares %> 
     <%= f.text_field :cost %> 
     <%= f.text_field :purchase_date, :type=>'date' %> 
     <%= f.submit "+ Add to Portfolio" %> 
<%end%> 
+0

爲什麼要存儲'current_portfolio'和'current_user'?你可以使用像'user/1/portfolio/45'這樣的資源嵌套,那麼當前的一個被它的id引用。 – 2013-03-06 04:25:23

+0

@BenjaminUdinktenCate我實際上寫道,我用'find_by_id'存儲current_user,但實際上我用一個cookie存儲它,以便在一段時間不活動後將其記錄下來。我也使用它,以便current_user不能通過在URL中輸入來訪問投資組合。我從來沒有了解嵌套資源,但我現在一定會檢查它。我不需要存儲current_portfolio,我只需要能夠在提交將資產添加到該投資組合的表單時選擇current_portfolio。 – 2013-03-06 04:29:39

+0

當您嘗試創建 – 2013-03-06 04:51:07

回答

0

我的猜測是,在隱藏字段portfolio_id不回來了作爲資產的散列的一部分。也許這與保存前分配@ asset.portfolio_id = params [:portfolio_id]一樣簡單。檢查你的日誌,確切地看到POST中返回的內容