Вопрос

Я пытаюсь присвоить сообщение на Flash [: уведомление] в модели наблюдателя.

Этот вопрос уже задан: Ruby on Rails: Наблюдатели и Flash [: Уведомление] Сообщения?

Тем не менее, я получаю следующее сообщение об ошибке, когда я пытаюсь получить доступ к нему в мою модели:

неопределенная локальная переменная или метод `Flash 'для #u003CModelObserver:0x2c1742c>

Вот мой код:

class ModelObserver < ActiveRecord::Observer
  observe A, B, C

  def after_save(model)
    puts "Model saved"
    flash[:notice] = "Model saved"
  end
end

Я знаю, что метод называется, потому что «модель сохранена» напечатана к терминалу.

Можно ли получить доступ к вспышке внутри наблюдателя, а если да, как?

Это было полезно?

Решение

Мне нужно было установить flash[:notice] В модели переопределить универсальный «@Model был успешным обновленным».

Это то, что я сделал

  1. Создал виртуальный атрибут в соответствующей модели под названием flash_notice
  2. Затем я установил виртуальный атрибут в соответствующей модели при необходимости
  3. Использовал Affilter, когда этот виртуальный атрибут не был пустым, чтобы переопределить вспышку по умолчанию

Вы можете увидеть мой контроллер и модель, как я достиг этого ниже:

class Reservation < ActiveRecord::Base

  belongs_to :retailer
  belongs_to :sharedorder
  accepts_nested_attributes_for :sharedorder
  accepts_nested_attributes_for :retailer

  attr_accessor :validation_code, :flash_notice

  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.flash_notice = "Your validation as successful and you will not need to do that again"
    end
  end
end

class ReservationsController < ApplicationController

  before_filter :authenticate_retailer!
  after_filter :flash_notice, :except => :index

  def flash_notice
    if !@reservation.flash_notice.blank?
      flash[:notice] = @reservation.flash_notice
    end
  end
end

Другие советы

Нет, вы устанавливаете его в контроллер, где происходит экономия. flash это метод, определенный на ActionController::Base.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top