Сообщение об ошибке не отображается в Rails 3 - PullRequest
0 голосов
/ 28 января 2011

У меня есть модель Entry и модель Photo, и для каждой фотографии пользователи могут представить «запись» - просто текст о фотографии. На странице показа для каждой фотографии я предоставляю полную форму для записи. В моем файле entry.rb есть следующие слова для подсчета слов в записи:

validate :count_words

def count_words
  body_size = body.to_s.scan(/[\w-]+/).size
  unless body_size < 300
      errors.add(:entry, "Your entry is too long")
  end
end

Когда я тестирую запись, которая содержит более 300 слов, сохранение не удается, и мой контроллер перенаправляет обратно на страницу, где они были. Две проблемы. Первые сообщения об ошибках не отображаются при перенаправлении контроллера. Я сделал это с формой (она была сгенерирована скаффолдом).

  <% if @entry.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@entry.errors.count, "error") %> prohibited this entry from being saved:</h2>

      <ul>
      <% @entry.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

Это действие контроллера, где я подозреваю, что проблема заключается в:

  def create
    @entry = Entry.new(params[:entry])

    respond_to do |format|
      if @entry.save
        format.html { redirect_to(@entry, :notice => 'Your entry was submitted.') }
      else
        format.html { redirect_to :back } 
      end
    end
  end

Я не совсем уверен, где проблема. Я планирую внедрить некоторый javascript в форму для проверки перед отправкой в ​​любом случае, но я хочу это как резервную копию. Может кто-нибудь сказать мне, что я делаю не так?

1 Ответ

1 голос
/ 28 января 2011

Как правило, вы хотите, чтобы ваш оператор else делал format.html { render :edit } вместо redirect :back.

При перенаправлении ошибки не сохраняются (поскольку они не сохраняются в базе данных или сеансе).

...