可以在Rails中为belongs_to关联设置别名吗?

 三毛2502858553 发布于 2023-01-30 11:38

我有一个有belongs_to关联的模型:

class Car < ActiveRecord::Base
  belongs_to :vendor
end

所以我可以打电话car.vendor.但我也想打电话car.company!所以,我有以下内容:

class Car < ActiveRecord::Base
  belongs_to :vendor
  def company
    vendor
  end
end

但这并没有解决分配情况car.company = 'ford',所以我需要为此创建另一种方法.alias我可以使用一种简单的机制进行关联吗?我可以只使用alias_method :company, :vendoralias_method :company=, :vendor=

3 个回答
  • 精简版:

      使用迁移生成模型

      $ rails generate model Car vendor:references name:string ...

      Car模型即car.rb文件中添加以下行

      class Car < ActiveRecord::Base
        belongs_to :company, :class_name => 'Vendor', :foreign_key => 'vendor_id'
      end
      

      现在你有@car.company实例方法.

    有关详细说明,请提前阅读[如果您理解上述内容,则可选!!]

    详细版本:

    该模型Car将与模型相关联Vendor(这是显而易见的).所以vendor_id桌子上应该有一个cars.

      为了确保表中vendor_id存在该字段cars,请在命令行上运行以下命令.这将生成正确的迁移.这vendor:references很重要.之后您可以拥有任意数量的属性.

      $ rails generate model Car vendor:references name:string

      或者在现有的迁移中create_table :cars只添加该行t.references :vendor

      class CreateCars < ActiveRecord::Migration
        def change
          create_table :cars do |t|
            t.string :name
            ...
            t.references :vendor
            t.timestamps
          end
        end
      end
      

      您需要做的最后一件事是编辑模型Car.所以将此代码添加到您的car.rb文件中

      class Car < ActiveRecord::Base
        belongs_to :company, :class_name => 'Vendor', :foreign_key => 'vendor_id'
      end
      

    完成第三步后,您将获得CarRails关联提供的模型的以下实例方法

      @car.company

      当你这样做@car.company时会返回一个#<Vendor ...>对象.要查找该#<Vendor ...>对象,它将查找表中的vendor_id列,cars因为您已经提到过:foreign_key => 'vendor_id'

      您可以通过编写为汽车实例设置公司

      @car.company = @vendor || Vendor.find(params[:id]) #whichever Vendor object you want
      @car.save
      

      这将节省的id那的Vendor对象在vendor_id该领域cars表.

    谢谢.

    2023-01-30 11:41 回答
  • 在Rails 4中,您应该只需添加alias_attribute :company, :vendor到模型中即可.

    2023-01-30 11:41 回答
  • 不,它不会查找company_id,例如更改您的代码,如下所示

    在Rails3中

    class Car < ActiveRecord::Base
       belongs_to :vendor
       belongs_to :company, :class_name => :Vendor,:foreign_key => "vendor_id"
    end
    

    在Rails4中

    我们可以使用别名属性.

    alias_attribute :company, :vendor
    

    2023-01-30 11:42 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有