Почему я получаю NoMethodError для атрибута, который существует в моей модели? - PullRequest
1 голос
/ 17 сентября 2010

Это ошибка, которую я получаю:

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 

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

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)
#

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

1 Ответ

1 голос
/ 17 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...