Итак, я бы хотел, чтобы пользователь увидел сообщение об ошибке, если он отправит комментарий и имя: пустое (типичное сообщение об ошибке, помощь в этом не требуется). Тем не менее, я бы хотел разрешить пользователю пропустить эту проверку, как только он получит уведомление о том, что «мы хотим, чтобы у всех комментариев было имя». Таким образом, он отправляет комментарий один раз, видит уведомление, затем может отправить форму снова без изменений, если он действительно не хочет добавлять имя, и validates_presences_of: name пропускается.
Но я не уверен, как это сделать. Я думал о том, чтобы проверить, откуда поступает запрос, но после создания ошибки передаются «новому» действию, которое совпадает с фактическим «новым» комментарием.
Затем я подумал о проверке наличия flash [ошибок], но это не сработает, потому что есть другие проверки, которые должен пройти комментарий.
Наконец, я подумал о попытке
validates_presences_of: name,: если
=>: уведомлено
но не знал, как определить уведомление. Честно говоря, я ненавижу задавать такой открытый вопрос, но не знал, с чего начать. Итак, есть ли способ просто проверить определенную проверку один раз?
Редактировать: вот мой контроллер
@comments = params[:comments].values.collect{ |comment| current_user.comments.create(comment) }.reject { |p| p.errors.empty? }
и мой взгляд:
<% @comments.each_with_index do |comment, index| %>
<% fields_for "comments[#{index}]", comment do |f| %>
<%= render :partial => 'form', :locals => { :f => f } %>
<% end %>
<% end %>
(материал в части 'form' - это просто базовый материал f.label, f.text_area)
Я думаю, что проблема действительно в моем представлении, поскольку она обрабатывает множество комментариев. Следует ли указывать скрытое поле для уведомлений в частичном «форме» или в «новом» представлении? Я думаю, что каждая итерация части не нуждается в скрытом поле с уведомлением, а только в самой форме. Но опять же я не знаю.