2010-10-24 173 views
0

錯誤驗證我真的有如何處理的錯誤處理的Rails 3.我已經破解了一些想法,可以工作,但寧願做正確的方式掙扎。如果任何人都可以提供幫助或給予指導,我會很感激。以下是我迄今爲止的Rails 3 - 嵌套資源

ItemController

def show 
    @item = Item.find(params[:id]) 
    @note = @item.notes.new 
    respond_with(@item) 
    end 

NoteController

def create 
    @note = @item.notes.build(params[:note]) 
    flash[:notice] = 'Your note was successfully added!' if @note.save 
    respond_with(@item) 
    end 

項目/ show.html.erb

<%= form_for ([@item, @note]), :html => {:id => 'form-add-item-note'} do |f| %> 

我已經試過

<%=f.error_messages%> 
<%=error_messages_for :note%> 
<%=error_messages_for :item,:note%> 

,甚至有錯誤處理

<%= render "global/error_messages", :target => @item %> 

包含

<% if target.errors.any? %> 
<div id="error_explanation"> 
    <h2><%= pluralize(target.errors.count, "error") %> prohibited this record from being saved:</h2> 
    <ul> 
     <% target.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
    </ul> 
</div> 
<% end %> 

我相信我失去了錯誤的重定向,但我似乎無法完全得到如何重定向模板或呈現從保存失敗說明中的項目控制器創建和我很想能夠通過錯誤全局模板@note,它使錯誤

回答

1

如果你重定向,你將失去任何錯誤消息。你需要渲染,而不是重定向觀點,如果你的對象是無效的,不保存。我不知道還做它與respond_with方法Rails3中的最佳方式,但如果你看看腳手架Rails3中產生,你看如何處理失敗節省工程。

respond_to do |format| 
    if @post.save 
    format.html { redirect_to(@post, :notice => 'Post was successfully created.') } 
    format.xml { render :xml => @post, :status => :created, :location => @post } 
    else 
    format.html { render :action => "new" } 
    format.xml { render :xml => @post.errors, :status => :unprocessable_entity } 
    end 
end 
+0

我假定這將意味着,如果我有一個@item,@note形式的話,我就必須有在@note級形式代碼,然後這樣我就可以呈現新動作 – bokor 2010-10-25 16:20:16