表单值被清除时验证结果失败+不显示验证错误

时间:2010-12-10 06:27:04

标签: ruby-on-rails

我是铁杆新手,所以希望这将是一个简单的。这就是我所拥有的:

模型/ school.rb

class School < ActiveRecord::Base
  has_many :courses
end

模型/ course.rb

class Course < ActiveRecord::Base
  belongs_to :school
  validates_presence_of :grade, :subject
end

配置/ routes.rb中

map.resources :schools, :has_many => :courses

视图/课程/ new.html.erb

<% form_for [@school, Course.new] do |f| %>
  <%= f.error_messages %>
  ...
<% end %>

courses_controller.rb

  def create
    @school = School.find(params[:school_id])
    @course = @school.courses.new(params[:course])
    if @course.save
      flash[:notice] = 'Course was successfully created.'
      redirect_to(@school)
    else
      respond_to do |format|
        # bug: form clears and no validation error messages are displayed
        format.html { render :action => "new" }
      end
    end
  end

验证失败时,将呈现new操作,但表单值已清除,我看不到任何验证失败消息。我错过了什么?

2 个答案:

答案 0 :(得分:2)

在您的courses_controller.rb中创建了

def new

@course = @school.courses.new()

在您的表单中,您必须提及

&lt;%form_for [@ school,Course.new] do | f | %GT;

&lt;%= f.error_messages%&gt;

...

&lt;%end%&gt;

这就是为什么你的错误信息没有出现在你的表格中

答案 1 :(得分:0)

您需要指定错误消息在视图中的显示位置。

视图/课程/ newhtml.erb

<%= error_messages_for 'course' -%>
<% form_for [@school, Course.new] do |f| %>
...
<% end %>