轨道嵌套的资源和路由初始化资源

问题描述:

我有一个正常的轨道使用嵌套窗体/资源和路由时,方式的问题。轨道嵌套的资源和路由初始化资源

我有两个表,词汇和定义...

词有很多定义,但我不创建一个Word,直到它至少有一个定义。

模型和控制器端的一切工作,但我无法弄清楚如何处理表单助手。

<%= semantic_form_for [@word, @definition] do |f| %> 

这个工作完美,但只有在@word实际存在并且不是新的UNSAVED记录。 IE中的控制器我正在做一个find_or_initialize_by呼吁Word然后建立一个定义。

<%= semantic_form_for [:word, @definition] do |f| %> 

这个词,但只有当这个词不存在。 IE浏览器,如果我尝试使用这种结构编辑我得到一个奇怪的网址(这是行不通的)。 words/12345/definition/12345

我尝试使用url_for帮手,但也有类似的结果如上...

任何其他的想法?

Mongoid未初始化嵌入式文件默认。你需要建立自己他们最有可能的回调在Word型号:

after_initialize :build_definition 

def build_definition 
    self.definitions.build unless self.definitions.any? 
end 
+0

它的工作原理,但我后来发现它会导致很多其他问题了。我不能再使用@ word.definitions.blank了? – holden 2012-02-27 18:22:27

如果你想留下来CRUD,并允许定义单词之前创建的,则必须重复路线的定义,一个字内,一家在外面,所以你可以做:

<%= semantic_form_for [@definition] do |f| %>