Rails 3:如何以嵌入的形式显示错误消息?

Pla*_*Ton 10 ruby-on-rails

我是rails的新手并尝试设置我的第一个嵌入式表单.表单本身可以工作,但我无法确定如何将验证错误消息发送到视图.我假设f.object.errors会提供访问权限,但是当说该方法存在时,f.object.errors.count总是返回0,而f.object.errors.any?返回false.除了没有显示实际的错误消息之外,表单按预期工作 - 即,未能插入无效数据并返回到验证失败的表单.下面列出的型号,控制器和视图 - 任何帮助非常感谢.

...
<!-- Form embedded in boards/show.html.erb -->
<%= form_for([@board, @board.boardthreads.build]) do |f| %> 
    <div class="field">  
        <%= f.label :title %><br />  
        <%= f.text_field :title %>  
    </div>  
    <div class="field">    
        <div class="actions">  <%= f.submit %>  </div> 
    </div>
<% end %>
...



class Boardthread < ActiveRecord::Base
  belongs_to :user
  belongs_to :board

  validates :user, :presence => true
  validates :board, :presence => true
  validates :title, :presence => true
end


class BoardthreadsController < ApplicationController
    def create

        @board = Board.find(params[:board_id])
        @boardthread = @board.boardthreads.new(params[:boardthread])  
        @boardthread.user = current_user
        @boardthread.save
        redirect_to board_path(@board) 

    end
end
Run Code Online (Sandbox Code Playgroud)

shi*_*ara 21

这是因为当你失败时,你再次在embedded_form中构建一个对象.您需要在表单中使用失败的对象.

在新操作中,您需要构建对象并在embedded_form上使用它.在创建过程中,您可以使用它,因为它已经定义了

<%= form_for([@board, @boardthread]) do |f| %>
    <% @boardthread.errors.full_messages.each do |msg| %>
      <p><%= msg %></p>
    <% end %>
    <div class="field">  
        <%= f.label :title %><br />  
        <%= f.text_field :title %>  
    </div>  
    <div class="field">    
        <div class="actions">  <%= f.submit %>  </div> 
    </div>
<% end %>
Run Code Online (Sandbox Code Playgroud)


Yan*_*nis 5

除了shingara回答:你可能还需要添加代码来显示表单中的错误,有些像

<ul>
  <%-  @boardthread.errors.full_messages.each do |msg| %>
    <li><%= msg %></li>
  <%- end %>
</ul>`
Run Code Online (Sandbox Code Playgroud)