rails嵌套资源和初始化资源的路由

时间:2012-02-23 11:52:29

标签: ruby-on-rails-3 mongoid form-for nested-routes nested-form-for

使用嵌套表单/资源和路由时,我遇到了rails正常运行的问题。

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

单词有很多定义,但是在它至少有一个定义之前我不创建Word。

模型和控制器端的所有内容都有效,但我无法弄清楚如何处理表单助手。

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

这完美有效但只有@word实际存在并且不是新的UNSAVED记录。控制器中的IE我正在对Word进行find_or_initialize_by调用,然后构建一个定义。

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

这句话,但只有在这个词不存在的情况下。 IE如果我尝试使用这种结构进行编辑,我会得到一个奇怪的网址(这不起作用)。 words/12345/definition/12345

我尝试使用url_for帮助器,但结果与上面类似......

还有其他想法吗?

2 个答案:

答案 0 :(得分:1)

默认情况下,Mongoid不会初始化嵌入的文档。您需要在Word模型中使用回调最有可能自己构建它们:

after_initialize :build_definition

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

答案 1 :(得分:0)

如果你想保留CRUD并允许在单词之前创建定义,你必须复制定义的路由,一个在单词内,一个在外面,所以你可以这样做:

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