【问题标题】:rails how to return parent's property as child's propertyrails如何将父母的财产作为孩子的财产返回
【发布时间】:2017-02-06 17:55:27
【问题描述】:

我有两个模型:recordType 和 record。

recordType 模型有属性:typeName、status。 记录模型有属性:application_id,complete。

RecordType has_many :records

现在,我想列出页面上的所有记录。我不想在每条记录上发送与记录捆绑在一起的记录类型。我希望能够说出record.typeName 并获得recordType 的typeName 属性。

基本上,我想效仿:

SELECT r.*, rt.typeName as typeName from records r 
INNER JOIN recordTypes rt on r.recordType_id = rt.id

在轨道上。我是 Rails 新手,所以我不确定如何实现这一点 - 我是否在模型中添加了一些东西?我必须创建一个序列化程序吗?如何返回这个父级的属性,让子级可以直接引用该属性而不是通过父级?

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

    首先,您的record 模型在数据库中应该有一个record_type_id 列,所以当您说Record belongs_to :record_type 时,关联是没有错误的。如果您还没有创建迁移,请将列添加到表中,您就可以开始了。
    您还需要对Record 模型进行反向关联。你有一个has_many :records,但你缺少一个belongs_to :record_type
    设置好列和关联后,您可以继续执行以下操作:

    @record = Record.first
    @record.record_type # It is a RecordType model
    @record.record_type.typeName # Returns the string typeName
    

    * 更新 *

    你可以给Record类添加一个方法:

    def typeName
      record_type.typeName if record_type
    end
    

    这样你就可以通过@record.typeName访问

    【讨论】:

    • 我确实有 id 键关联,并且我已经能够使用 record.record_type.typeName 获取 typeName。我想要做的是使用 record.typeName 来获取 typeName 而不必每次都通过 record_type。
    • @Darshan 您可以在Record 上定义一个返回类型名称的方法,请参阅编辑。
    • 啊,太好了!后续问题:此时我纯粹将 Rails 用作 API,我需要将记录对象发送到我的前端。我无法在前端使用 typeName 方法 - 我将如何在前端实现相同的功能?除了序列化没有别的办法吗?
    • @Darshan 是的,您可以使用像grape 或jbuilder 这样的JSON 生成gem,它将您的模型对象映射到JSON 对象。
    • 优秀。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多