проверки для формы модели - PullRequest
0 голосов
/ 10 февраля 2012

У меня есть форма, которая генерируется объектом модели.

<%= form_for(@pages) do |f| %>

  <p>
    <%= f.label :title %><br />
    <%= f.text_field :title %>
  </p>
<% end %>

Вот метод контроллера для этого:

def new
    @pages = Page.new

    respond_to do |format|
    format.html  # new.html.erb
    format.json  { render :json => @post }
    end
  end

Вот код модели:

class Page < ActiveRecord::Base
validates :title, :presence => true
end

Теперь, как я могу проверить форму при отправке (я знаю, что кнопки отправки нет, я добавлю ее позже). Я использовал <%= f.error_messages %> в форме, но это дает мне ошибку:

NoMethodError in Pages#new

Showing C:/rorapp/app/views/pages/_form.html.erb where line #2 raised:

undefined method `error_messages' for #<ActionView::Helpers::FormBuilder:0x49b9ca8>
Extracted source (around line #2):

1: <%= form_for(@pages) do |f| %>
2:   <%= f.error_messages %>
3:   <p>
4:     <%= f.label :title %><br />
5:     <%= f.text_field :title %>
Trace of template inclusion: app/views/pages/new.html.erb

Rails.root: C:/rorapp

Application Trace | Framework Trace | Full Trace
app/views/pages/_form.html.erb:2:in `block in _app_views_pages__form_html_erb__975660997_39217440'
app/views/pages/_form.html.erb:1:in `_app_views_pages__form_html_erb__975660997_39217440'
app/views/pages/new.html.erb:2:in `_app_views_pages_new_html_erb___256256638_47476836'
app/controllers/pages_controller.rb:11:in `new'
Request

Parameters:

{"title"=>"",
 "author"=>"",
 "email"=>"",
 "body"=>"",
 "reference"=>"Google"}
Show session dump

Show env dump

Response

Headers:

None

Как я могу это проверить?

Ответы [ 2 ]

2 голосов
/ 10 февраля 2012

Мой опыт работы с Rails в основном с версией 2.3.14, поэтому я не могу быть на 100% уверен в этом, но похоже, что f.error_messages устарел в Rails версии 3.0

Этот предыдущий вопрос помогает? f.error_messages в Rails 3.0

Редактировать: в основном я говорю, что похоже, что вы пытаетесь отображать ошибки по-старому, что, вероятно, несовместимо с вашей версией Rails. Ссылка, которую я разместил выше, содержит несколько предложений.

1 голос
/ 11 февраля 2012

Если я правильно понимаю ваш вопрос, вы хотите знать, как проверить форму при отправке и как отображать ошибки при их наличии?

Проверки, которые у вас есть в вашей модели в настоящее время, будут проверять поле «заголовок», когда вы нажимаете кнопку «Отправить». Поэтому я думаю, что вы уже хороши в этом отношении, так как это, кажется, ваш единственный.

Чтобы ошибки отображались в ваших представлениях, вы должны использовать что-то вроде этой формы:

<%= form_for @pages do |f| %>
  <h2><%= "#{pluralize(@pages.errors.count, "error")} prohibited this from being saved:" %></h2>
  <% @pages.errors.full_messages.each do |msg| %>
    <li><%= msg %></li>

  <p>
    <%= f.label :title %><br />
    <%= f.text_field :title %>
  </p>
<% end %>

Это обрабатывает любые ошибки элегантным способом. Если имеется более одной ошибки, метод pluralize обрабатывает множественное число слова error, поэтому предложение читает что-то вроде «2 ошибки запретили это сохранение». Таким образом, если вы решите добавить больше полей, вы уже готовы.

Затем pages.errors.full_messages отображает каждую ошибку в предложении, понятном пользователю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...