我的客户#show action上有一个用于创建消息的表单(客户has_many消息)。
表单提交后,会转到#eddate。我确认消息的“文本”列不能为空,验证有效。但是,我不确定如何再次显示客户#show并显示验证错误。我尝试了一些东西,它似乎是redirect_to但是丢失了验证错误或渲染'customers#show'但它实际上是/ messages而不是/ customers /:id。这是我的代码:
class CustomersController < ApplicationController
def index
end
def new
@customer = Customer.new
end
def show
@customer = current_user.customers.find(params[:id])
@messages = @customer.messages
@message = Message.new
end
class MessagesController < ApplicationController
def create
@message = current_user.messages.new(
customer_id: params[:message][:customer_id],
text: params[:message][:text],
direction: 'sent'
)
respond_to do |format|
if @message.save
format.html { redirect_to customer_path(params[:message][:customer_id]) }
format.json { render json: @message, status: :created, location: @message }
else
format.html { render template: 'customers/show' }
format.json { render json: @message.errors, status: :unprocessable_entity }
end
end
end
这当前呈现的是客户/节目但是在错误的路线上(应该是/ customers /:id而不是/ messages)。我该怎么做呢?
答案 0 :(得分:0)
使用flash
def create
@message = current_user.messages.new(
customer_id: params[:message][:customer_id],
text: params[:message][:text],
direction: 'sent'
)
respond_to do |format|
if @message.save
format.html { redirect_to customer_path(params[:message][:customer_id]) }
format.json { render json: @message, status: :created, location: @message }
else
flash[:error] = @message.errors.full_messages.join("\n")
format.html { render template: 'customers/show' }
format.json { render json: @message.errors, status: :unprocessable_entity }
end
end
end
在您的节目视图中,您可以使用
显示错误<%= flash[:error] %>
您也可以直接从@messages对象调用错误,因为您只渲染视图而不是重定向
<%= @message.errors.full_messages.join("\n") %>