Rails 3: как отображать сообщения об ошибках во встроенной форме? - PullRequest
10 голосов
/ 27 сентября 2010

Я новичок в рельсах и пытаюсь настроить мою первую встроенную форму.Сама форма работает, но я не могу определить, как отправлять сообщения об ошибках валидации в представление.Я предполагал, что f.object.errors предоставит доступ, но, хотя говорят, что метод существует, f.object.errors.count всегда возвращает 0, а f.object.errors.any?возвращает ложьПомимо отображения фактических сообщений об ошибках, форма работает должным образом, то есть не вставляет недопустимые данные и возвращает форму, которая не прошла проверку.Модель, контроллер и вид, перечисленные ниже - любая помощь высоко ценится.

...
<!-- 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

Ответы [ 2 ]

21 голосов
/ 27 сентября 2010

Это потому, что когда вы потерпели неудачу, вы снова строите объект во встроенной форме.Вам нужно использовать объект с ошибкой в ​​вашей форме.

В вашем новом действии вам нужно создать свой объект и использовать его в свой встроенный_форм.И во время создания вы используете его, потому что он уже определен

<%= 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 %>
5 голосов
/ 27 сентября 2010

В дополнение к ответу Шингара: Вам также может понадобиться добавить код для отображения ошибок в вашей форме, например,

<ul>
  <%-  @boardthread.errors.full_messages.each do |msg| %>
    <li><%= msg %></li>
  <%- end %>
</ul>`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...