我正在设置单表继承,使用ContactEvent作为ContactEmail,ContactLetter和ContactCall都将继承的模型。
但我对如何创建路由和控制器感到难过。
例如,假设我想创建一个类型为Email的新ContactEvent。
我想要一种方法来执行以下操作:
new_contact_event_path(contact, email)
这将从Contact模型和Email模型中获取实例。
在内部,我认为contact_event_controller需要知道......
@contact_event.type = (params[:email]) # get the type based on what was passed in?
@contact_event.event_id = (params[:email]) #get the id for the correct class, in this case Email.id
不确定这是如何运作的......
答案 0 :(得分:3)
我有类似的问题。
答案 1 :(得分:0)
我会为每种资源类型设置一个控制器(可能还有视图)。因此,为ContactLetter等添加一个ContactEmail控制器。不要为基类ContactEvent打扰一个。然后你的路径会读到:
new_contact_email_path(@contact) or new_contact_letter_path(@contact)
然后,控制器操作将使用他们所代表的正确模型,即:
@contact_email = ContactEmail.new(params[...])
如果您可以将三种类型的资源分开,而不是尝试传递类型并在一个控制器中构建正确的对象,那么您应该更容易找到生活。缺点是你可能需要在前端有更多的链接/表单/视图,但是根据你的应用程序,从用户的角度来看可能不是一件坏事。