Как мне создать новый атрибут в модели? - PullRequest
1 голос
/ 15 ноября 2010

Привет, я новичок в ruby ​​и rails и хочу создать новый атрибут email для модели Account.Внизу находится тест для моего нового атрибута.Тест является копией атрибута name name, но я подумал, что они будут работать аналогичным образом.

it "should have a email field" do
  @account.email = "email"
  @account = save_and_reload(@account)
  @account.email.should == "email"
end

Единственное, что я сделал, чтобы пройти тестовый проход, - это создать атрибут электронной почты в модели учетной записи.И я также вручную вставил новый столбец электронной почты в таблицу учетных записей базы данных.

Вот часть кода модели учетной записи, в которую я вставил атрибут электронной почты:

class Account < ActiveRecord::Base
  attr_accessible :name, :logo, :account_preference_attributes,:email

Когда я запускаю тест, я получаю ошибку NoMethodError в «Учетная запись должна иметь поле электронной почты'

undefined method `email=' for #<Account:0xb6468ca8>

Итак, как мне создать новый атрибут в модели?

Ответы [ 3 ]

2 голосов
/ 15 ноября 2010

Я думаю, вы путаете attr_accessible с attr_accessor.Первый - это то, как Rails защищает атрибуты от массового присвоения, а второй - директива Ruby, которая создает методы чтения и записи для переменных экземпляра.

Если вы просто хотите использовать переменную экземпляра в своей модели, используйте1005 *.Если вы хотите создать постоянный атрибут, в котором значение будет сохранено в столбце таблицы, создайте миграцию и добавьте туда столбец.

2 голосов
/ 15 ноября 2010

Вы должны создать миграцию, чтобы добавить столбец электронной почты в таблицу и запустить rake db: migrate

class AddSsl < ActiveRecord::Migration
 def self.up
   add_column :accounts, :email, :string
 end

 def self.down
   remove_column :accounts,:email
 end 
end

Также удалите столбец электронной почты из таблицы, которую вы добавили вручную.

1 голос
/ 15 ноября 2010

Я думаю, что проблема возникает из-за того, что вы изменили ее только в своей базе данных разработки, тесты выполняются в отдельной базе данных, которая сбрасывается при каждом запуске вашего тестового набора.

Выполните миграцию , а затем выполните следующую команду, чтобы перенести тестовую среду, или пропустите часть RAILS_ENV, чтобы просто сделать это для разработки:

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