RoR - отображение отдельных сообщений об ошибках для полей формы - PullRequest
1 голос
/ 19 ноября 2010

Как я могу отображать сообщения об ошибках валидации чуть ниже поля формы, а не показывать все сообщения вверху страницы.

Моя версия Rails - Rails 3.0.0

У меня есть категория имени таблицы с полями id, title и description.Моя модель класса

class Category < ActiveRecord::Base
  validates_uniqueness_of :title, :message => "Title already exist"
  validates_presence_of :title, :description => "Cannot be blank"
end

Контроллер

class CategoriesController < ApplicationController

  def index
  end

  def new
  end

  def create
     @category = Category.new(params[:category])
     @category.created = Time.now
     @category.modified = Time.now
     respond_to do |format|
       if @category.save
         @category_last=Category.last
           format.html { redirect_to :controller => 'categories', :action => 'show', :id => @category_last.id }
       else
          #format.html { redirect_to :controller => 'categories', :action => 'new' } 
        end
     end
  end

  def show
  end

  def edit
  end

end

и View

<div id="newCategory" class='page add'>
    <div class='screenTitle'>New Category</div>
    <div class='form_wrapper'>
        <%= form_tag :action=>'create' %>
            <div class='field_wrapper'>
                <div class='field_label'>
                    Title 
                </div>
                <div class='field_input'>
                    <%= text_area(:category, :description, :class=>'') %>
                </div>
                <div class='clearfix'>&nbsp;</div>
            </div>
            <div class='field_wrapper'>
                <div class='field_label'>
                    Title 
                </div>
                <div class='field_input'>
                    <%= text_field(:category, :title, :class=>'') %>
                </div>
                <div class='clearfix'>&nbsp;</div>
            </div>
            <div class='field_wrapper'>
                <div class='field_submit'>
                    <%= submit_tag "Submit", :type => "submit", :class => "submit" %>
                </div>
                <div class='clearfix'>&nbsp;</div>
            </div>
         </form>
    </div>
    <div class='actions'>
        <ul>
            <li><%= link_to 'List Categoris', root_url+'categories' %></li>
        </ul>
        <div class='clearfix'>&nbsp;</div>
    </div>
</div>

Ответы [ 2 ]

2 голосов
/ 19 ноября 2010

Я бы, наверное, сделал что-то подобное. Используйте пустую модель в действии: новый, как это:

def new
  @category = Category.new
end

А затем используйте form_for вместо form_tag следующим образом:

<%= form_for @category, :action=>'create' do |f| %>
  <%= f.text_field(:title, :class=>'') %>

А затем в действии: создать, я бы попробовал это:

if @category.save
  # redirect if you want to
else
  render :action => :new
end

Таким образом, если по какой-либо причине создание завершится неудачно, контроллер отобразит шаблон для: new, но все еще будет использовать объект с ошибкой @category в помощнике form_for. И вы всегда можете получить доступ к сообщениям об ошибках модели с помощью @ category.errors.on (: title)

Поэтому добавьте следующее к представлению, в котором вы хотите отобразить сообщение об ошибке:

<%= @category.errors.on(:title) unless @category.errors.on(:title).nil? %>
1 голос
/ 19 ноября 2010

Возможно, вы захотите взглянуть на formtastic . Там много чего интересного, и очень хорошо делает ошибки по полю.

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