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
中執行此操作。所以我不認爲渲染是一個解決方案。
如果您將重定向替換爲:redirect_to portfolio_path(params [:portfolio_id],:asset => @asset),會發生什麼情況?錯誤未顯示的原因是因爲錯誤附加到了@asset對象,該對象未傳遞給顯示頁面。 – 2013-03-07 02:51:30
@AngeloChrysoulakis我嘗試過,但沒有任何反應,它只是將我重定向到'portfolio_path(params [:portfolio_id])',沒有顯示任何錯誤。不過,我認爲你們走在了正確的道路上,爲什麼你選擇:資產作爲傳遞給展示頁面的符號? – 2013-03-07 02:56:40
這就是我認爲可能會發生的事情。看看下面的鏈接以獲得完整的解決方案 - http://stackoverflow.com/questions/1536428/rails-validation-over-redirect - 我更喜歡用javascript處理這些細微差別。所以,在這種情況下,爲了成功保存,我只需更新資產。否則,我會在部分前面添加一個錯誤。 – 2013-03-07 03:06:09