1

我在 Ruby 1.9.2(带有 rvm)上使用更新的 pre Ruby on Rails,并制作了一个新的测试应用程序

$ 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 中的一个错误还是我应该做一些不同的事情?

4

2 回答 2

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 %>

您可以为这项工作创建一个助手。

于 2011-05-21T11:16:54.213 回答
0

我不相信 Ruby on Rails 会自动包含您请求的部分内容。您需要添加一些 JavaScript 代码才能使其正常工作。我想像这样的事情:

// Application.js
$("form").bind("ajax:success", function (event, data, status, xhr) {
    $(event.target).replaceWith(data);
});
于 2011-08-03T15:22:39.313 回答