首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Rails 3.1中保存之前的create_attribute不会设置self.attribute_id

在Rails 3.1中保存之前的create_attribute不会设置self.attribute_id
EN

Stack Overflow用户
提问于 2011-06-23 01:15:04
回答 1查看 871关注 0票数 3

老代码,在Rails 3.0中工作:

代码语言:javascript
复制
belongs_to :primary_stream

before_save :autocreate_primary_stream, :if=>lambda {|a| a.primary_stream.nil?}

def autocreate_primary_stream
  self.create_primary_stream()
end

在Rails3.1中:填充了self.primary_stream,而self.primary_stream_id为空。保存记录时,primary_stream_id将作为nil保存到数据库。

我不得不这样做,以获得我所期望的行为:

代码语言:javascript
复制
belongs_to :primary_stream

before_save :autocreate_primary_stream, :if=>lambda {|a| a.primary_stream.nil?}

def autocreate_primary_stream
  self.create_primary_stream()
  self.primary_stream_id = primary_stream.id
end

是有什么改变了,还是我做了什么很愚蠢的事?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-23 17:52:22

Rails在3.1中引入的在回调中处理关联创建的方式似乎存在一个bug。据我所知,在before_save中分配一个归属关联不会将外键分配给所有者模型。

然而,3.1中的自动保存关联提供了一种更清晰的方式来实现这一点-

代码语言:javascript
复制
belongs_to :primary_stream

before_validation :autocreate_primary_stream, :if=>lambda {|a| a.primary_stream.nil?}

def autocreate_primary_stream
  self.build_primary_stream()
end

并且主流将与所有者记录一起被自动保存。

https://github.com/rails/rails/issues/1594在某种程度上是相关的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6443845

复制
相关文章

相似问题

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