1

我正在设置单表继承,使用 ContactEvent 作为 ContactEmail、ContactLetter 和 ContactCall 都将继承的模型。

但我对如何创建路由和控制器感到困惑。

例如,假设我想创建一个类型为 Email 的新 ContactEvent。

我想要一种方法来执行以下操作:

new_contact_event_path(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

只是不确定这是如何工作的......

4

2 回答 2

3

我有类似的问题。

在这里查看我是如何解决的。

于 2011-02-15T00:31:55.747 回答
0

对于您的每种资源类型,我都会有一个控制器(也许还有视图)。因此,为 ContactEmail 添加一个控制器,为 ContactLetter 等添加一个控制器。不要为基类 ContactEvent 添加一个控制器。然后您的路径将显示为:

new_contact_email_path(@contact) or new_contact_letter_path(@contact)

然后,控制器操作将使用它们所代表的正确模型,即:

@contact_email = ContactEmail.new(params[...])

如果您可以将三种类型的资源分开,而不是尝试将类型传入并在一个控制器中构建正确的对象,那么您会发现生活会容易得多。缺点是您可能需要在前端有更多的链接/表单/视图,但是取决于您的应用程序,从用户的角度来看这可能不是一件坏事。

于 2010-05-27T09:14:18.197 回答