我在Message模型中有一个vilatator,它在控制台上运行良好,但是在渲染模板后我无法显示任何错误。 我的路线
resources :rooms do
resources :messages
end
resources :users
我的:新版式文件
<h1>New Message</h1>
<%= @message.errors.messages[:body] %>
<%= render 'form', message: @message %>
<%= link_to 'Back', room_messages_path %>
_form文件
<%= 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}]}>
我不知道为什么它会以这种奇怪的方式起作用,您能帮我吗?
答案 0 :(得分:0)
使用full_messages
而不是手动遍历所有错误实例:
更改
<% message.errors.messages.each do |message| %>
<li><%= message %></li>
<% end %>
到
<% message.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
答案 1 :(得分:0)
好像您正在隐藏message
变量:
<% message.errors.messages.each do |message| %>
<li><%= message %></li>
<% end %>
尝试重命名
<% message.errors.messages.each do |err_message| %>
<li><%= err_message %></li>
<% end %>