【问题标题】:rails create model with sub attributesrails 创建具有子属性的模型
【发布时间】:2015-12-03 10:06:53
【问题描述】:

我是 Rails 新手,我正在构建一个应用程序来从外部网站获取 json 数据并将其保存在数据库中。 json 在 User 下有以下字段:

{ “ID”: , “姓名”: ” ”, “用户名”: ” ”, “电子邮件”: ” ”, “地址”: { “街道”: ” ”, “套房”:“”, “城市”: ” ”, “邮政编码”: ” ”, } “电话”: ” ”, “网站”: ” ” },

我知道如何使用名称、用户名和电子邮件创建用户模型。但是如何添加具有多个子属性的地址。我没有将“数组”视为创建模型的选项。 先感谢您。

【问题讨论】:

    标签: ruby-on-rails json


    【解决方案1】:

    您可以通过将地址与用户相关联来做到这一点。

    首先,您应该创建一个名为 user_address 的新模型,其中包含您想要的属性:

    rails g model user_address address:string number:integer user_id:integer
    

    在您的 user_address.rb 文件中:

    belongs_to :user
    

    然后,在你的 user.rb 文件中你应该添加

    has_many :user_addresses
    

    执行此操作后,您将能够通过执行以下查询来访问所有用户的地址:

    user.user_addresses
    

    这将为您提供一个“ActiveRecord::Associations::CollectionProxy”对象,您可以在其中进行迭代:

    user.user_addresses.each do |address_instance|
      puts address_instance.address+"#{ address_instance.number}"
    end
    

    要在表单中管理它,您可以按照以下指南操作:https://github.com/nathanvda/cocoon/wiki/A-guide-to-doing-nested-model-forms

    【讨论】:

    • 我不确定是否需要创建两个不同的模型(用户和用户地址),因为每个用户都有唯一的 ID、姓名、用户名、电子邮件、地址、电话和网站。我想我可以添加地址作为属性,并使用街道、套房、城市邮政编码作为地址属性的数组。
    【解决方案2】:

    我想你可以试试这个:

    class NameOfYourMigration < ActiveRecord::Migration
    
      def change
        add_column :your_models, :address, :text
      end
    
    end
    
    class YourModel < ActiveRecord::Base 
     serialize :address, Hash  # if your variable is a Hash
     serialize :address, Array # or for an Array
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-28
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多