У меня есть модель 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 в форму для проверки перед отправкой в любом случае, но я хочу это как резервную копию. Может кто-нибудь сказать мне, что я делаю не так?