在不同的控制器中渲染表单部分(不嵌套)

我有两个生成脚手架的模型,一个是LogBook,另一个是LogEntry。 我想在LogBook显示页面上为LogEntry渲染部分表单。 当我在局部调用渲染时,我收到此错误:

undefined method `model_name' for NilClass:Class 

我假设这是因为默认_form使用的实例变量在从单独的控制器调用时不存在。 所以我尝试将LogEntry _form.html.erb转换为使用局部变量并通过render调用传递它们。 在此之后是错误:

 Model LogEntry does not respond to Text 

如何将此部分包含在显示页面中以形成不同的控制器?

楷模:

 class LogBook  :destroy end class LogEntry  "log_book", :foreign_key => "log_book_id" end 

LogEntry _form.html.erb(使用局部变量):

   

prohibited this log_entry from being saved:


LogBook show.html.erb:

 

Name:

@log_book.LogEntries.new %> |

只要从视图文件夹中提供路径,就可以渲染所需的任何部分:

  <%= render :partial => '/log_entries/form', :log_entry => @log_book.log_entries.build %> 

您的路径必须以/开头,让Rails知道您相对于视图文件夹。

否则,它被假定为相对于您当前的文件夹。

作为旁注,避免在局部使用实例变量是很好的,你当时就做了。

刚刚看到你的部分forms有错误:

  :Text 

不应该是模型的有效列名。 试试:文字

尝试按如下方式切换render方法:

 <%= render :partial => 'log_entries/form', :log_entry => @log_book.LogEntries.new %> 

传递对象的实例变量时,只使用渲染。 但是,由于您要指定文件,因此最好使用该选项。