我需要创建一个包含任何对象类型的待办事项列表。将成为列表一部分的对象:饮食、处方和兽医咨询。
我每小时制作:将对象类保留在 object_type 列上,当我将获取对象时,使用 .send(TodoItem.x.object_type) 方法。这是最好的方法吗?我想使用序列化选项,但我不知道。
为此,我创建了这个结构:
饮食(id:整数,名称:字符串,todo_item_id:整数,created_at:日期时间,updated_at:日期时间)
class Diet < ActiveRecord::Base
belongs_to :todo_item
end
处方(id:整数,名称:字符串,todo_item_id:整数,created_at:日期时间,updated_at:日期时间)
class Prescription < ActiveRecord::Base
belongs_to :todo_item
end
TodoItem (id: integer, name: string, done_date: date, is_done: boolean, created_at: datetime, updated_at: datetime, object_type: string)
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
对不起我的英语不好:|