【问题标题】:Set attributes when automatically building has_one child model自动构建 has_one 子模型时设置属性
【发布时间】:2024-01-20 10:34:01
【问题描述】:

我正在尝试在创建父模型时自动构建子模型,如 this post 中所述。假设我有两个模型 Person has_one :folder 并且我想在该人创建时创建一个文件夹为此,我进入 Person 模型并(从上面的示例中)执行以下操作。

has_one :folder
before_create :build_default_folder

private
def build_default_folder
  build_folder
  true
end

这是有道理的,但是说Profile 有一些属性,我想根据Person 的属性为Folder 设置一个属性。比如如果这个人有:person_name,我应该怎么做才能将:folder_name设置为“[person_name]'s_Folder”?

感谢您的任何建议。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 model attributes nested-attributes


    【解决方案1】:

    您可以从子模型访问父属性:

    class Profile < AR::Base
        has_one :folder
        before_create :build_default_folder
    
        private
        def build_default_folder
          build_folder(folder_name: person_name)
          true
        end
    end
    

    阅读Active Record Associations 的文档。

    【讨论】:

    • 感谢您的回复。如果这是在人模型中,那不是build_folder(folder_name: self.person_name)吗?还是我弄错了?
    • 是的,我的错,你可以同时使用self.person_nameperson_name