Почему я не могу получить доступ к модели ошибки после рендеринга шаблона? - PullRequest
0 голосов
/ 06 января 2019

У меня есть vilatator в модели сообщений, и он хорошо работает с консоли, но после рендеринга шаблона я не могу показать никаких ошибок. Мои маршруты

resources :rooms do
  resources :messages
 end
resources :users

My: новый файл макета

<h1>New Message</h1>
<%= @message.errors.messages[:body] %>
<%= render 'form', message: @message %>

<%= link_to 'Back', room_messages_path %>

_form file

<%= form_with(model: message, url: room_messages_path(params['room_id'], 
 message) ) do |form| %>
 <% if message.errors.any? %>
  <div id="error_explanation">
  <h2><%= pluralize(message.errors.count, "error") %> prohibited this message from being saved:</h2>

  <ul>
     <% message.errors.messages.each do |message| %>
       <li><%= message %></li>
     <% end %>
  </ul>
  </div>
  <% end %>

 <div class="field">
   <%= form.label :body %>
   <%= form.text_area :body %>
 </div>

 <div class="actions">
   <%= form.submit %>
 </div>
<% end %>

И код в моем контроллере

def create
p message_params
@message = Message.new(message_params)
@message.room = Room.find(params[:room_id])
@message.user = @current_user
respond_to do |format|
  if @message.save
    format.html { redirect_to room_message_path(@message.room, @message), notice: 'Message was successfully created.' }
    format.json { render :show, status: :created }
  else
    p @message.errors
    format.html { render :action => :new }
    format.json { render json: @message.errors, status: :unprocessable_entity }
  end
end
end
def message_params
  params.require(:message).permit(:body)
end

Я вижу сообщения об ошибках в контроллере, но не могу показать их в файле макета.

#<ActiveModel::Errors:0x00007f5525181100 @base=#<Message id: nil, body: "", created_at: nil, updated_at: nil, user_id: 7, room_id: 3>, @messages={:body=>["can't be blank"]}, @details={:body=>[{:error=>:blank}]}>

Я не знаю, почему это так странно работает, вы можете мне помочь?

Ответы [ 2 ]

0 голосов
/ 07 января 2019

Похоже, вы затеняете message переменная:

 <% message.errors.messages.each do |message| %>
   <li><%= message %></li>
 <% end %>

Попробуйте переименовать его

 <% message.errors.messages.each do |err_message| %>
   <li><%= err_message %></li>
 <% end %>
0 голосов
/ 06 января 2019

Используйте full_messages вместо ручной итерации по всем экземплярам ошибок:

Изменение

<% message.errors.messages.each do |message| %>
  <li><%= message %></li>
<% end %>

до

<% message.errors.full_messages.each do |message| %>
  <li><%= message %></li>
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...