2012-09-18 81 views
1

我在構建自定義驗證時顯示error_messages.html.erb部分時出現問題。error_message部分未在Rails中呈現

我有,例如,一種形式進行交易,這將啓動,如:

<%= form_for @transaction do |f| %> 
    <%= render 'shared/error_messages', :object => f.object %> 

我有這樣可以避免用戶作出對自己事務的驗證:

validate :self_transaction_not_possible 

def self_transaction_not_possible 
     bel = Belonging.find_by_id(self.belonging.id) 
     unless bel.nil? 
     if self.user_id == bel.user_id 
      errors.add(:base, "You cannot perform a transaction with yourself") 
     end 
     end 
    end 

然後我在瀏覽器中運行了這樣一個例子(在一個所有者上啓動一個事務我擁有),並且我在self_transaction_not_possible中放置了一個調試器。我檢查驗證發生了,實際上,在調試器內部,我看到輸入:self.errors.full_messages給了我我的錯誤消息,因此驗證似乎正在執行......

然後我會預料到,該對象是無效的,錯誤信息會出現在我的視圖,但沒有...把調試器放在error_messages.html.erb部分內部,顯示我object.errors.any仍然== {}: -/...

然後,用戶被重定向到保存過程失敗時應該看到的頁面(驗證已正確執行),但他從未看到錯誤消息...

我是否缺少明顯的東西? ...

+0

很難從真正的bug區分你的打字錯誤:'<%=的form_for @Transaction,做| F | %>' - 逗號在這裏做什麼? '<%= render'shared/error_messages'; :object => f.object%>' - 爲什麼你在這裏放分號? '除非bel.nil?' - 'nil'之後的空格是故意的?等等...... – jdoe

+0

@jdoe:好的,我輸入的速度太快,並且由於網絡問題,我無法複製/粘貼。無論如何,問題現在是無字形的(我希望)... – citraL

回答

1

OK ......這是失敗,因爲我是做一個控制器中的redirect_to的沒有被保存在交易的時候,從而刪除@transaction.errors矢量的原因...

更改此爲render :template => 'transactions/edit'解決了我的問題..

當然,這是很難猜測在看這個問題: -/...