首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法获取要设置或保存的非质量赋值

无法获取要设置或保存的非质量赋值
EN

Stack Overflow用户
提问于 2012-02-25 18:02:24
回答 2查看 284关注 0票数 2

这里有一个令人沮丧的简单问题。我使用的是Rails 3.1,具有以下类:

代码语言:javascript
复制
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

在我的控制器中,我尝试使用mass-assignment ( ActiveRecord构建辅助对象之一)创建一个作业,然后将"active“属性设置为1,然后保存作业。下面是控制器代码:

代码语言:javascript
复制
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和编写自己的setter的所有组合,但无论我做什么,似乎都找不到正确的组合来使属性保留在模型上。我不认为它是活动记录,因为即使在@job.save之前,这个属性就已经消失了(使用调试日志记录)。我用谷歌搜索了一下,但找不出我做错了什么。有谁能帮帮忙吗?

编辑:来自rake的schema.rb:

代码语言:javascript
复制
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

另一个编辑:

好吧,经过更多的谷歌搜索,我终于在这里找到了答案:

How can I override the attribute assignment in an active record object?

如果修改的是ActiveRecord属性而不是类实例,则需要执行以下操作:

self:fieldname = value

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-25 20:13:08

从模型中删除attr_accessor :active。它导致将值保存在实例变量中,而不是通过attributes散列保存到数据库中。您不必编写访问器,因为ActiveRecord会根据active列自动为您编写访问器。

它在调试日志中显示为空白,因为它被初始化为nil。如果删除attr_accessor行,并将数据库中的active列更改为NOT NULL DEFAULT 0,它将被初始化为0。即ActiveRecord迁移中的:null => false, :default => 0或schema.rb。

票数 3
EN

Stack Overflow用户

发布于 2012-02-25 19:48:17

我认为你没有将job_provider_id添加到att_accessible中。请尝试以下操作

代码语言:javascript
复制
attr_accessible :roleTagline, :projectTagline, :projectStartDate, :projectDuration, :postedStartDate, :postedEndDate, :skillsRequired, :skillsPro, :experiencedRequired, :description, :active, :job_provider_id
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9443035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档