ruby-on-rails
  • methods
  • rake
  • 2010-09-17 1 views 1 likes 
    1

    Это ошибка, я получаю:Почему я получаю NoMethodError для атрибута, который существует в моей модели?

    ContactPostalcardsController#skip (NoMethodError) "undefined method `status=' for #<ContactPostalcard:0x2b21433d64b0>" 
    

    Это код, назвав его и пытается присвоить значение атрибута статуса для ContactPostalcard (модель):

    def skip 
    
        @contact_postalcard = ContactPostalcard.new(params[:contact_postalcard]) 
        @contact_postalcard.contact_id = params[:contact_id] 
        @contact_postalcard.postalcard_id = params[:postalcard_id] 
    
        @contact_postalcard.status = "skipped" 
        @contact_postalcard.date_sent = Date.today 
        @contact_postalcard.date_created = Date.today 
    
        if @contact_postalcard.save 
         render :text => 'This email was skipped!' 
    
        end 
        end 
    

    Это модель упоминается. Обратите внимание, что «аннотация» выход показывает статус в качестве атрибута:

    class ContactPostalcard < ActiveRecord::Base 
        attr_accessible :title, :contact_id, :postal_id, :postalcard_id, :message, :campaign_id, :date_sent, :status 
    
    
        belongs_to :contact 
        belongs_to :postalcard 
    
        alias_attribute :body, :message 
        alias_attribute :subject, :title 
    
        named_scope :nosugar, :conditions => { :sugarcrm => false } 
    
        def company_name 
        contact = Contact.find_by_id(self.contact_id) 
    
        return contact.company_name 
    
        end 
    
        def asset 
        Postalcard.find_by_id(self.postalcard_id) 
        end 
    
        def asset_class 
        Postalcard.find_by_id(self.postalcard_id).class.name 
        end 
    
    end 
    
    
    
    # == Schema Information 
    # 
    # Table name: contact_postalcards 
    # 
    # id   :integer   not null, primary key 
    # title   :string(255) 
    # contact_id :integer 
    # postalcard_id :integer 
    # message  :text 
    # campaign_id :integer 
    # date_sent  :datetime 
    # created_at :datetime 
    # updated_at :datetime 
    # postal_id  :integer 
    # sugarcrm  :boolean   default(FALSE) 
    # status  :string(255) 
    # 
    

    Я неясно, почему я постоянно получаю «неопределенный метод» - я добавил атрибут статуса (это было раньше, но отсутствующим используется миграция, а затем raked), так что нужна помощь ... спасибо.

    ответ

    1

    Вы перезапустили приложение Rails с момента запуска миграции? Если вы работаете в режиме производства, Rails кэширует ваши классы до тех пор, пока вы его не перезагрузите, и поскольку статус не был атрибутом перед миграцией, Rails не добавил бы для этого дополнительных методов доступа, что объясняет, почему status= не определено.

    +0

    Хммм ... Я сделал команду «перезагрузки героя», и я все еще получаю ошибку .... – Angela

    +0

    , хотя это была лишь часть проблемы, это было то, что мне нужно было для достижения окончательного решения и как практика вообще. – Angela

    Смежные вопросы