2011-05-20 33 views
1

我使用更新前Ruby on Rails的Ruby的1.9.2(RVM帶),並取得與的Rails 3.1 Ajax表單不顯示驗證

$ rails generate scaffold Project name:string 

class Project < ActiveRecord::Base 
    validates_presence_of :name 
end 
一個新的測試應用程序

我改變

<%= form_for @project do |f| %> 

<%= form_for @project, :remote => true do |f| %> 

我現在仍然可以(無需對控制器進行任何更改)將新項目添加到項目中。如果我嘗試在名稱字段中添加空,它不會添加任何內容(validates_presence_of:name會停止此操作),但是我不會收到任何驗證錯誤消息。我已經嘗試從3.0轉換的應用程序相同的結果相同。在這裏,我有:

class KursController < ApplicationController 
    # GET /kurs 
    # GET /kurs.xml 
    respond_to :js, :html 

和:

def update 
    @kur = Kur.find(params[:id]) 
    @kur.update_attributes(params[:kur]) 
    flash[:notice] = "Lagret" if @kur.save 
    respond_with(@kur, :layout => !request.xhr?) 
end 

在3.1我沒有得到任何驗證錯誤消息。這是因爲Ruby on Rails 3.1中的錯誤還是我應該做的不同?

回答

0

您錯過了調用這些錯誤。做這樣的事情:

<%= form_for @project do |f| %> 
<%= render :partial => 'my_error_messages_for', :locals => {:collection => @project} %> 

在 「_my_error_messages_for.html.erb」:

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

您可以爲這項工作的輔助工具。

+0

這dosn't修復它。我以正常形式收到錯誤消息。它是不顯示錯誤的Ajax表單(「:remote => true」)。也許我必須捕捉js.erb文件中的錯誤消息? – 2011-05-22 07:43:40

0

我不相信Ruby on Rails會自動包含您請求的部分內容。您需要添加一些JavaScript代碼才能使其正常工作。像這樣的東西我想象:

// Application.js 
$("form").bind("ajax:success", function (event, data, status, xhr) { 
    $(event.target).replaceWith(data); 
});