2013-03-07 34 views
0

我有一個擁有多種資產(即資產模型)的投資組合模型。窗體爲單獨的控制器,錯誤不顯示

我的投資組合顯示視圖顯示當前用戶的投資組合資產,但它也有一種快速將資產添加到current_portfolio的表單。

<%= form_for(@asset) do |f| %> 
     <%= hidden_field_tag :portfolio_id, params[:id]%> 
     <%= f.text_field :asset_symbol %> 
     ... some other fields for cost, shares held, etc 
     <%= f.submit "Add Asset to current portfolio"%> 
<%end%> 

添加資產工作正常。另外,將符號字段留空將防止添加資產。但是,當我提交表單時,錯誤不會顯示。

我在我的模型中有validates :asset_symbol, presence: true,我知道它沒有保存。問題是這些錯誤未被傳遞到我的投資組合顯示視圖。就好像資產控制器和投資組合顯示視圖之間的資產錯誤消失一樣。

顯示視圖具有這應該顯示錯誤

<% if @asset.errors.any? %> 
     <% @asset.errors.full_messages.each do |msg| %> 
      <li> <%= msg %> </li> 
     <% end %> 
    <%end%> 

@asset以下定義我的投資組合控制器Asset.new

資產控制器:

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

我在做什麼錯?

請注意,如果我是render 'portfolios/show'錯誤將顯示,但後來我遇到了問題,我現在在鏈接/assets而不是/portfolio/show/1。這很重要,因爲我在Create的資產控制器中沒有相同的變量,也因爲我無法參考/assets中的:id,我可以在/portfolio/show/1中執行此操作。所以我不認爲渲染是一個解決方案。

+0

如果您將重定向替換爲:redirect_to portfolio_path(params [:portfolio_id],:asset => @asset),會發生什麼情況?錯誤未顯示的原因是因爲錯誤附加到了@asset對象,該對象未傳遞給顯示頁面。 – 2013-03-07 02:51:30

+0

@AngeloChrysoulakis我嘗試過,但沒有任何反應,它只是將我重定向到'portfolio_path(params [:portfolio_id])',沒有顯示任何錯誤。不過,我認爲你們走在了正確的道路上,爲什麼你選擇:資產作爲傳遞給展示頁面的符號? – 2013-03-07 02:56:40

+0

這就是我認爲可能會發生的事情。看看下面的鏈接以獲得完整的解決方案 - http://stackoverflow.com/questions/1536428/rails-validation-over-redirect - 我更喜歡用javascript處理這些細微差別。所以,在這種情況下,爲了成功保存,我只需更新資產。否則,我會在部分前面添加一個錯誤。 – 2013-03-07 03:06:09

回答

0
def create 
    @asset = Asset.new(params[:asset]) 
    @portfolio = Portfolio.find(params[:portfolio_id]) 
    @asset.portfolio_id = params[:portfolio_id] 
    respond_to do |format|  
     if @asset.save 
     format.html { redirect_to portfolio_path(params[:portfolio_id]) } 
     else 
     format.html { render :action => "show", :controller => "portfolio?" } 
     end 
    end 
    end