through references rails many has_many has_and_belongs_to_many has example belongs and ruby-on-rails activerecord model has-many

ruby-on-rails - many - rails model references



el modelo de rails tiene_mucho de sí mismo (5)

Descubrí que en Rails 5 el pertenece se ha convertido en obligatorio de forma predeterminada, por lo que no pude guardar las instancias de mi modelo ... agregar una opción a la primera línea de la solución recomendada corrige esto ...

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

Tengo un modelo de evento. Los eventos pueden tener eventos principales, establecidos a partir de una columna en el modelo (parent_event_id). Necesito poder hacer has_many :event en el modelo, así que puedo hacer, por ejemplo, event.child_event o event.parent_event . Pero mi Google no funcionó tan bien.

Mi modelo:

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

Mi esquema:

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


Deseará cambiar su has_many a algo como esto:

has_many :parent_events, class_name: ''Event'' has_many :child_events, ->(event) { where parent_event_id: event.id }, class_name: ''Event''

Esto es de los 4 documentos del riel en el enlace: http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

Específicamente, la sección sobre "personalizar la consulta". Esto debería permitirle hacer lo que está buscando. No lo intenté localmente, pero esto es similar a lo que tuve que hacer para implementar una aplicación de fútbol pickem que hice hace un tiempo.

Espero que esto ayude.


Este es un modelo autorreferencial, puedes probar algo como esto:

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

De esta forma, puede llamar a @ event.parent para obtener un objeto Evento ActiveRecord y @ event.child_events para obtener una colección ActiveRecord de objetos Event



Rails ya tiene una gema para proporcionar ancestros de estructura de árbol anidados. Será mejor en tales escenarios:

https://github.com/stefankroes/ancestry

Podrás acceder a los siguientes métodos:

event.parent event.children event.siblings