小编Jas*_*son的帖子

嵌套属性update_attributes使用insert而不是update

我有一个用户和嵌套的配置文件类,如下所示:

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

有谁知道为什么更新会这样发生?我不希望最终得到一个没有连接到任何用户的配置文件行数据库.

ruby-on-rails nested-attributes update-attributes

28
推荐指数
3
解决办法
2万
查看次数

运行 Rails 核心测试

我想为 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)

我正在使用:

  • rvm with ruby​​ ruby​​-1.9.3-preview1(1.9.2 告诉我与 rails 4 不兼容)
  • 耙子-0.9.2.2
  • 最新的 github 提交尝试:211174a
  • (Ubuntu)

只是要仔细检查:

$ 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。

ruby-on-rails bundler

5
推荐指数
1
解决办法
172
查看次数