我需要flash[:notice]
在模型中设置以覆盖通用的“@model 已成功更新”。
这就是我所做的
- 在相应的模型中创建了一个虚拟属性,称为
validation_message
- 然后我在需要时在相应模型中设置虚拟属性
- 当此虚拟属性不为空时使用 after_action 来覆盖默认闪存
你可以在下面看到我的控制器和模型我是如何完成这个的:
class Reservation < ActiveRecord::Base
belongs_to :retailer
belongs_to :sharedorder
accepts_nested_attributes_for :sharedorder
accepts_nested_attributes_for :retailer
attr_accessor :validation_code, :validation_messages
validate :first_reservation, :if => :new_record_and_unvalidated
def new_record_and_unvalidated
if !self.new_record? && !self.retailer.validated?
true
else
false
end
end
def first_reservation
if self.validation_code != "test" || self.validation_code.blank?
errors.add_to_base("Validation code was incorrect")
else
self.retailer.update_attribute(:validated, true)
self.validation_message = "Your validation is successful and you will not need to do that again"
end
end
end
class ReservationsController < ApplicationController
before_filter :authenticate_retailer!
after_filter :validation_messages, :except => :index
def validation_messages
return unless @reservation.validation_message.present?
flash[:notice] = @reservation.validation_message
end
end
一种可能的重构方法是将实际消息移动到适当的文件(例如语言环境)中并validation_message
仅传递给适当的键。
如果您需要多个通知,则很容易将其validation_message
转换为数组或散列并调用它validation_messages
。