钢轨本身模型的has_many [英] rails model has_many of itself

查看:153
本文介绍了钢轨本身模型的has_many的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个事件模型。事件可以有父母的事件,从模型(parent_event_id)一列设置。我需要能够做到的has_many:事件的模式,所以我可以做,例如, event.child_event event.parent_event 。但我的谷歌搜索没有制定出那么好。

我的模型:

 类事件<的ActiveRecord :: Base的
    attr_accessible:days_before,:EVENT_NAME,:EVENT_DATE,:list_id,:RECIPIENT_EMAIL,:RECIPIENT_NAME,:parent_event_id,:IS_DELETED,:USER_ID

    belongs_to的:用户
    的has_many:event_email
    的has_many:事件
结束
 

我的架构:

  CREATE_TABLE事件,:力=>真做| T |
    t.datetimeEVENT_DATE
    t.integerdays_before
    t.stringRECIPIENT_EMAIL
    t.integerlist_id
    t.stringRECIPIENT_NAME
    t.datetimecreated_at:空=>假
    t.datetime的updated_at:空=>假
    t.integerUSER_ID
    t.stringEVENT_NAME
    t.integerparent_event_id
    t.booleanIS_DELETED:默认=>假
结束
 

解决方案

这是一种自我指涉的模式,你可以尝试这样的:

 类事件<的ActiveRecord :: Base的
  belongs_to的:父母,:将class_name => 事件,:foreign_key => parent_event_id
  的has_many:child_events,:将class_name => 事件,:foreign_key => parent_event_id
结束
 

这样的话,你可以叫@ event.parent得到一个ActiveRecord事件对象和@ event.child_events获得事件对象的ActiveRecord的集合

I have a event model. Events can have parent events, set from a column in the model (parent_event_id). I need to be able to do has_many :event on the model, so I can just do, for example, event.child_event or event.parent_event. But my googling hasn't worked out that well.

My Model:

class Event < ActiveRecord::Base
    attr_accessible :days_before, :event_name, :event_date, :list_id, :recipient_email, :recipient_name, :parent_event_id, :is_deleted, :user_id

    belongs_to :user
    has_many :event_email
    has_many :event
end

My Schema:

create_table "events", :force => true do |t|
    t.datetime "event_date"
    t.integer  "days_before"
    t.string   "recipient_email"
    t.integer  "list_id"
    t.string   "recipient_name"
    t.datetime "created_at",                         :null => false
    t.datetime "updated_at",                         :null => false
    t.integer  "user_id"
    t.string   "event_name"
    t.integer  "parent_event_id"
    t.boolean  "is_deleted",      :default => false
end

解决方案

This is a self-referential model, you can try something like this:

class Event < ActiveRecord::Base
  belongs_to :parent, :class_name => "Event", :foreign_key => "parent_event_id"
  has_many :child_events, :class_name => "Event", :foreign_key => "parent_event_id"
end

That way, you can call @event.parent to get an ActiveRecord Event object and @event.child_events to get an ActiveRecord collection of Event objects

这篇关于钢轨本身模型的has_many的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆