如何显示来自另一个控制器的验证错误

时间:2014-03-12 21:37:20

标签: ruby-on-rails validation routes

我的客户#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)。我该怎么做呢?

1 个答案:

答案 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") %>
相关问题