Я пытаюсь получить валидацию, работающую для моего назначения формы комментариев. По какой-то причине все, что я получаю, это моя флеш-ошибка, возвращаемая ко мне. То, как он реагирует (абсолютно никакого вывода), я подозреваю, что я не указал вещи должным образом.Проверка правильности формы Rails не работает, нет вывода
Комментарии должны быть созданы только сейчас, поэтому сгенерируйте comment_controller с соответствующим действием;
Заполните действие для создания. Он должен создать новый комментарий, связанный с сообщением и создателем current_user;
flash[:error] = "Error saving the comment. Please try again."
_form.html.erb
<%= form_for [topic, post, comment] do |f| %>
<% if comment.errors.any? %>
<div class="alert alert-danger">
<h4>There are <%= pluralize(comment.errors.count, "error") %>.</h4>
<ul>
<% comment.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="form-inline">
<%= form_group_tag(comment.errors[:body]) do %>
<%= f.label :body %>
<%= f.text_field :body, class: 'form-control'%>
<% end %>
<div class="form-group">
<%= f.submit "Comment", class: 'btn btn-default' %>
</div>
</div>
<% end %>
в form_group_tag я указал: тело, чтобы соответствовать мой ярлык/текстовое поле.
вот мой комментарий модель с: телом и: пользователь уточняются
class Comment < ActiveRecord::Base
belongs_to :post
belongs_to :user
# minimum 5 characters and must be signed in
validates :body, length: { minimum: 5 }, presence: true
validates :user, presence: true
end
comments_controller.rb
class CommentsController < ApplicationController
def create
# find topic by id
@topic = Topic.find(params[:topic_id])
# find post id through topic
@post = @topic.posts.find(params[:post_id])
# comments on post
@comments = @post.comments
@comment = current_user.comments.build(params.require(:comment).permit(:body, :post_id))
@comment.post = @post
if @comment.save
flash[:notice] = "Your comment was created."
redirect_to [@topic, @post]
else
flash[:error] = "Error saving the comment. Please try again."
redirect_to [@topic, @post]
end
end
end
Если я нажму кнопку отправки появляется ошибка вспышки только, ничто не связано с подтверждением возвращается мне.
Что у вас в Def new? Попробуйте @comment = current_user.comments.new вместо current_user.comments.build – bntzio
Он делает то же самое. Я обновлю вопрос, у меня не должно быть метода «def new». –
Как упоминают @bntzio и @mgrim, это корень вашей проблемы. Обычная парадигма заключается в том, что действие 'new' отображает эту форму, которая затем отправляется на ваш' create' действие. Итак, если вы хотите повторно отобразить форму с дополнительной информацией (ошибкой), вы должны использовать 'render 'new''. Какое действие контроллера представляет изначально '_form.html.erb'? –