在我的Profile类中,与:fields的关联是有问题的。如果它在那里,我运行以下内容:
user = User.create
user.profiles << Profiles.new
user.save
Profile.all
抛出以下异常:
SystemStackError: stack level too deep
from /Users/jon/.rvm/gems/ruby-1.9.3-p194/gems/dm-core-1.2.0/lib/dm-core/support/ordered_set.rb:319
为什么会这样?有解决方法吗? 这是代码:
require 'rubygems'
require 'data_mapper'
require 'dm-timestamps'
require 'active_support/core_ext'
DataMapper::Model.raise_on_save_failure = true
class User
include DataMapper::Resource
property :id, String, :default => lambda {|r,p| SecureRandom.uuid}, :key=>true
property :givenName, String, :length => 255, :default => ""
property :surname, String, :length => 255, :default => ""
property :isTestUser, Boolean, :default => false
has n, :organizations
has n, :profiles
def default_profile
profiles.all(:organization => nil).first
end
end
class Profile
include DataMapper::Resource
property :id, Serial
belongs_to :organization, :required => false
belongs_to :user
has n, :fields # if i remove this line then Profile.all doesn't puke, if I have this line then any call to Profile.all fails with stack overflow.
end
class Field
include DataMapper::Resource
property :id, Serial
property :fieldType, String, :length => 200, :required => true
property :valueType, String, :length => 200, :required => true
property :value, String, :length => 500, :required => true
belongs_to :profile
end
class Organization
include DataMapper::Resource
property :id, Serial
property :name, String
timestamps :at
belongs_to :user, :required=>false
end
答案 0 :(得分:1)
有n,:字段导致某种名称冲突。将字段更改为ProfileField和:字段:profile_fields问题消失。