سؤال

أحاول تعيين رسالة إلى Flash [: إشعار] في مراقب النموذج.

لقد تم طرح هذا السؤال بالفعل: Ruby on Rails: المراقبون وفلاش [: إشعار]؟

ومع ذلك ، أحصل على رسالة الخطأ التالية عندما أحاول الوصول إليها في النموذج الخاص بي:

undefined local variable or method `flash' for #<ModelObserver: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. استخدم بعد ذلك عندما لم تكن هذه السمة الافتراضية فارغة لتجاوز الفلاش الافتراضي

يمكنك رؤية وحدة التحكم الخاصة بي ونموذجها كيف أنجزت هذا أدناه:

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