расстраивает простую проблему здесь. Я использую 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] = значение