Не удается получить значение не массового назначения для установки или сохранения - PullRequest
2 голосов
/ 25 февраля 2012

расстраивает простую проблему здесь. Я использую Rails 3.1 и имею следующий класс:

class Job < ActiveRecord::Base
  attr_accessor :active
  attr_accessible :roleTagline, :projectTagline, :projectStartDate, :projectDuration, :postedStartDate,
    :postedEndDate, :skillsRequired, :skillsPro, :experiencedRequired, :description, :active
  scope :is_active, :conditions => {:active => 1}

  validates :roleTagline,  :presence => true,
                :length => { :minimum => 5 }
  validates :projectTagline, :presence => true,
                :length => { :minimum => 5 }
  belongs_to :job_provider

#   def active=(act)
#       @active = act
#   end
end

В моем контроллере я пытаюсь создать задание, используя массовое назначение (один из помощников по сборке ActiveRecord), затем установите для атрибута active значение 1 и сохраните задание. Вот код контроллера:

def create
  @job_provider = current_user.job_provider
  @job = @job_provider.jobs.build(params[:job])
  @job.active= 1 # debug logging @job.active here gives an empty string
  if @job.save # etc.

Я перепробовал все комбинации удаления attr_accessor и написания своего собственного установщика, но, что бы я ни делал, я не могу найти правильную комбинацию, чтобы атрибут оставался в модели. Это не активная запись, я не думаю, потому что даже до @ job.save атрибут ушел (от использования ведения журнала отладки). Я погуглил, но не могу понять, что я делаю не так. Может кто-нибудь помочь, пожалуйста?

Редактировать: schema.rb из граблей:

create_table "jobs", :force => true do |t|
t.string   "roleTagline"
t.string   "projectTagline"
t.date     "projectStartDate"
t.integer  "projectDuration"
t.date     "postedStartDate"
t.date     "postedEndDate"
t.string   "skillsRequired"
t.string   "skillsPro"
t.string   "experiencedRequired"
t.string   "description"
t.datetime "created_at"
t.datetime "updated_at"
t.integer  "active"
t.integer  "job_provider_id"
end

Другое редактирование:

Хорошо, после еще большего поиска в Google, я наконец нашел ответ на этот вопрос здесь:

Как я могу переопределить назначение атрибута в активном объекте записи?

Если вы изменяете атрибут ActiveRecord, а не экземпляр класса, вам нужно сделать:

self [: fieldname] = значение

Ответы [ 2 ]

3 голосов
/ 25 февраля 2012

Удалить attr_accessor :active из модели.Это вызывает сохранение значения в переменной экземпляра, а не в базе данных через хэш attributes.Вам не нужно писать аксессор, потому что ActiveRecord делает это автоматически за вас, основываясь на столбце active.

В журнале отладки он отображается пустым, потому что он инициализирован нулем.Если вы удалите строку attr_accessor и измените столбец active в базе данных на NOT NULL DEFAULT 0, он будет инициализирован на 0. т. Е. :null => false, :default => 0 в миграции ActiveRecord или schema.rb.

0 голосов
/ 25 февраля 2012

Я думаю, вы не добавили job_provider_id к att_accessible.Попробуйте следующее

attr_accessible :roleTagline, :projectTagline, :projectStartDate, :projectDuration, :postedStartDate, :postedEndDate, :skillsRequired, :skillsPro, :experiencedRequired, :description, :active, :job_provider_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...