代码之家  ›  专栏  ›  技术社区  ›  Dr1Ku Ace Suares user1266770

Rails属性别名

  •  3
  • Dr1Ku Ace Suares user1266770  · 技术社区  · 15 年前

    我只是想知道是否可以在Rails中“重命名”一个关联。让我们假设:

    # An ActiveRecord Class named SomeModelASubModel (some_model_a_sub_model.rb)
    class SomeModelASubModel < ActiveRecord::Base
      has_many :some_model_a_sub_model_items
    end
    
    # An ActiveRecord Class named SomeModelASubModelItem (some_model_a_sub_model_item.rb)
    class SomeModelASubModelItem < ActiveRecord::Base
      belongs_to :some_model_a_sub_model
    end
    

    此时,调用一些_model.items(其中一些_model是someModelAsubModel类的实例)将触发未定义的方法错误。

    但是,实现这一目标的最佳实践是什么,例如:

    # With a method_alias or something, would it be possible to :
    some_model = SomeModelASubModel.first # for instance
    items = some_model.items
    
    # For the reason stated, this doesn't work, one has to call :
    items = some_model.some_model_a_sub_model_items
    

    这样的速记法可行吗?

    提前谢谢!

    1 回复  |  直到 15 年前
        1
  •  4
  •   Pär Wieslander    15 年前

    你可以通过使用 :items 而不是 :some_model_a_sub_model_items 作为关系的名称,并使用 :class_name 参数:

    # An ActiveRecord Class named SomeModelASubModel (some_model_a_sub_model.rb)
    class SomeModelASubModel < ActiveRecord::Base
      has_many :items, :class_name => "SomeModelASubModelItems"
    end
    

    ActiveRecord docs 更多信息。

    推荐文章