Доступ к флэш-памяти направляющих [: заметьте] в модели

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

Этот вопрос уже задали: Ruby on Rails: Наблюдатели и флэш-память [: заметить] сообщения?

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

undefined local variable or method `flash' for #

Вот мой код:

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

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

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

Действительно ли возможно получить доступ к флэш-памяти в наблюдателе, и если так, как?

12
задан Community 23 May 2017 в 12:02
поделиться

2 ответа

Мне нужно было установить flash [: notice] в модели чтобы переопределить общий "@model был успешно обновлен".

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

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

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

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
10
ответ дан 2 December 2019 в 05:03
поделиться

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

20
ответ дан 2 December 2019 в 05:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: