【问题标题】:Can't get Rails :autosave option to work on models无法让 Rails :autosave 选项在模型上工作
【发布时间】:2010-01-16 00:50:58
【问题描述】:

这可能是一件非常简单的事情,但我这辈子都做不到。出于某种原因, :autosave 实际上并不是自动保存底层模型。

这是我的架构:

    create_table :albums do |t| 
  t.string :title
  t.text :review

  t.timestamps
end 

create_table :songs do |t| 
  t.integer :album_id
  t.string :name
  t.integer :length
end 

create_table :cover_arts do |t| 
  t.integer :album_id
  t.integer :artist
end 

这是我的模型:

class Album < ActiveRecord::Base
  has_many :songs, :autosave => true
  has_one :cover_art, :autosave => true
end

class CoverArt < ActiveRecord::Base
  belongs_to :album
end

class Song < ActiveRecord::Base
  belongs_to :album
end

当我在 IRB 中对数据库中已有封面的专辑执行以下操作时:

a = Album.find(1)
a.title = "New title"
a.cover_art.artist = "New Artist"
a.save

它会更新专辑记录,但不会更新 CoverArt 记录。我做错了什么?

【问题讨论】:

    标签: ruby-on-rails database activerecord


    【解决方案1】:

    当这种情况发生在我身上时,我发现 betternestedset 插件在没有使用 alias_method_chain 或其他任何东西来维护现有调用链的情况下覆盖了更新方法。我替换了 betternestedset 的更新重写并在其位置放置了一个简单的 attr_readonly 调用(类似于该插件中现有的 attr_protected 调用)。也许这会对某个地方的人有所帮助。

    【讨论】:

      【解决方案2】:

      根据docs,您必须保存父记录,而不仅仅是设置新值,子记录也要保存。

      post = Post.find(1)
      post.title # => "The current global position of migrating ducks"
      post.author.name # => "alloy"
      
      post.title = "On the migration of ducks"
      post.author.name = "Eloy Duran"
      
      post.save
      post.reload
      post.title # => "On the migration of ducks"
      post.author.name # => "Eloy Duran"
      

      【讨论】:

      • 抱歉,我在上面的信息中忽略了这一点——我实际上也在这样做。所以这也不是问题 - 我已经编辑了上面的帖子以澄清。
      • 也许您可以在控制台中包含您获得的输出?
      • 嗨弗洛伊德,我在控制台中得到的唯一输出是保存的返回值“true”。查看 development.log 文件,这是因为成功保存了相册对象。但是,cover_art 对象不是。它根本不会出现在日志文件中。所以不幸的是,无论是控制台还是日志文件中都没有错误消息来指示问题可能是什么。
      • 我的意思是你正在经历的整个过程来确认值没有被正确设置,使用重新加载等。不幸的是,这里没有很多明显的问题,所以它是很难回答你的问题...
      猜你喜欢
      • 2023-03-08
      • 1970-01-01
      • 2021-07-24
      • 2012-05-31
      • 1970-01-01
      • 2015-06-16
      • 1970-01-01
      • 1970-01-01
      • 2016-03-31
      相关资源
      最近更新 更多