Мне нужно создать список задач с любыми типами объектов. Объекты, которые будут частью списка: диета, рецепт и ветеринария.Лучший способ для списка задач с любыми объектами типа
В течение часа я сделал: Храните класс объекта в столбце object_type, и когда я получу объект, используйте метод .send (TodoItem.x.object_type). Это лучший способ? Я думал использовать параметр сериализации, но я не понимаю.
А для этого я создать эту структуру:
Diet (ID: целое, имя: строка, todo_item_id: целое число, created_at: DATETIME, updated_at: DateTime)
class Diet < ActiveRecord::Base
belongs_to :todo_item
end
Предписание (id: integer, name: string, todo_item_id: integer, created_at: datetime, updated_at: date Время)
class Prescription < ActiveRecord::Base
belongs_to :todo_item
end
TodoItem (ID: целое число, имя: строка, done_date: дата, is_done: логическое значение, created_at: Дата и время, updated_at: DateTime, тип_объект: строка)
class TodoItem < ActiveRecord::Base
has_one :diet
has_one :prescription
def related
self.send(self.object_type)
end
end
На контроллерах я сделать:
class PrescriptionsController < ApplicationController
before_filter :create_todo_item, only: [:create]
def create
@prescription = Prescription.new(prescription_params)
@prescription.todo_item = @todo_item
...
end
class ApplicationController < ActionController::Base
def create_todo_item
@todo_item = TodoItem.new(object_type: params[:controller].singularize)
@todo_item.save
end
end
Извините за мой бедный английский: |
Я хочу связать больше типов объектов с будущим, создав новое отношение для каждый класс ... – Ronan
Невозможно создать дополнительные ассоциации без явного объявления отношений в моделях. – zeantsoi
Недавно я ответил на аналогичный вопрос: http: // stackoverflow.com/questions/17029659/model-attribute-contains-collection-of-object/17031165 # 17031165 –