我有一个用户和嵌套的配置文件类,如下所示:
class User < ActiveRecord::Base
has_one :profile
attr_accessible :profile_attributes
accepts_nested_attributes_for :profile
end
class Profile < ActiveRecord::Base
belongs_to :user
attr_accessible :name
end
user = User.find(1)
user.profile.id # => 1
user.update_attributes(profile_attributes: {name: 'some name'})
user.profile.id # => 2
Run Code Online (Sandbox Code Playgroud)
我不明白为什么rails会丢弃旧配置文件并创建一个新配置文件.
运用
user.profile.update_attributes({name: 'some name'})
Run Code Online (Sandbox Code Playgroud)
只是按预期更新当前配置文件.但在那种情况下,我没有利用accepts_nested_attributes_for
有谁知道为什么更新会这样发生?我不希望最终得到一个没有连接到任何用户的配置文件行数据库.
我想为 rails 项目做出贡献,但在第一个障碍上磕磕绊绊……我克隆了 rails 存储库,但在尝试运行单元测试时遇到错误。
$ bundle exec rake test
...
/home/me/.rvm/rubies/ruby-1.9.3-preview1/lib/ruby/1.9.1/minitest/spec.rb:131:in `register_spec_type': wrong number of arguments (1 for 2) (ArgumentError)
Run Code Online (Sandbox Code Playgroud)
我正在使用:
只是要仔细检查:
$ ruby -v
ruby 1.9.3dev (2011-07-31 revision 32789) [i686-linux]
Run Code Online (Sandbox Code Playgroud)
我已经阅读并没有在http://edgeguides.rubyonrails.org/contributing_to_ruby_on_rails.html 中找到任何信息
还完全重新安装了 rvm,重新编译了 ruby,并多次更换了所有 gem。