使用具有相同控制器的STI路径

时间:2010-03-16 20:16:11

标签: ruby-on-rails single-table-inheritance

我正在使用STI,我想知道,我是否必须为每个型号配备一个单独的控制器?我有一种情况,我只在STI关系中使用一个模型的创建和编辑操作,但如果我尝试为其执行表单,则会出现“未定义的方法”错误。更具体地说,我有两个继承自List的模型:

class RegularList < List
class OtherList < List

我有一个处理这些操作的列表控制器,但我只使用表单创建带有RegularList的新模型。即我使用form_for创建新List对象的唯一情况是使用RegularList。我想做的是:

class ListsController < ApplicationController

def new
  @list = RegularList.new
end

否则创建新列表的路径看起来像regular_list / new,但我希望它只是list / new。想法?

编辑:问题是当我使用上面的代码时,我得到一个'未定义的方法'错误。我的观点如下:

...

所以看起来在Lists控制器中使用RegularList对象存在一些问题,这是我试图解决的主要问题。对不起,我意识到这不是最明确的解释。

2 个答案:

答案 0 :(得分:11)

我知道这有点晚了,但也许这会对其他人有所帮助。您想使用becomes方法。假设您正在编辑@list RegularList的实例。然后做

form_for @list.becomes(List)

答案 1 :(得分:-4)

  

我正在使用STI,我想知道,我是否必须为每个型号配备一个单独的控制器?

不,你没有。