为什么这不是保存价值?
每次创建新用户时,都应设置默认设置并在设置模型中创建条目。 如果我手动创建用户/设置关联,则效果非常好。通过 psql 或 rails c
class User < ActiveRecord::Base
after_create do
if self.setting.nil? # check if user got settings most likely not
# call settings model and create new default settings
Setting.create(:user_id => self.id, :foo => "bar", :baz => true)
end
end
end
是的,名称也是正确的,例如,如果我为用户创建设置,并且我想查询我必须使用的用户设置:
current_user.setting.language
这在某种程度上是愚蠢的,因为它应该是复数但是它有效,所以不要担心我的回调中的任何命名约定或简单拼写错误。
实际上它实际上不是一个错误,但价值只是没有得到保存。 这是过程:
用户创建一个新帐户,此回调应在设置页面上创建默认设置,有一个div需要设置ID,如下所示:
<h2 data-settings_id="<%= current_user.setting.id %>" id="current_user" data-user="<%= current_user.id %>">Settings </h2>
如果我手动创建设置,此页面工作正常 - 所以我猜回调没有创建任何设置,因为我收到此错误:
undefined method `id' for nil:NilClass
注意: 我使用设计,我不想覆盖任何这些类。 如何解决这个问题?感谢
答案 0 :(得分:0)
我认为问题出在你的回调条件中:
self.setting.nil?
由于setting
是一种关系,它应该返回一个 ActiveRecord :: Associations :: CollectionProxy 对象,它非常像Array
并且用nil?
检查始终返回false
,您需要与blank?
核对。
这样的事情应该有效:
class User < ActiveRecord::Base
after_create do
if self.setting.blank? # check if user got settings most likely not
# call settings model and create new default settings
self.setting.create(:foo => "bar", :baz => true) # user_id will be set for us since we initiated the new object using the relation
end
end
end