在Ruby on Rails 3中从另一个控制器渲染表单

5

好的,问题是尝试从控制器呈现一个表单来创建新条目。为此,我调用了与脚手架创建一起提供的默认表单。我试图让它像这样:

<%= render :partial => 'contactos/form'  %> 

我遇到了以下错误:

undefined method 'model_name' for NilClass:Class

有没有办法只在视图中呈现?

如果不行... 那么我应该在控制器中添加哪些参数?

目前我只有以下代码:

Class DisplayController < ApplicationController
     def index
        @contactos = Contacto.all
     end
end

这是视图控制器,而不是我的脚手架中具有创建、更新和编辑功能的控制器。

好的,我已经进行了大量的研究,但没有一个答案可以解决我的问题。(这是我第一次提问,请谅解我可能会犯错)

3个回答

6
问题在于你在联系表单中使用的变量不存在。在index操作中只创建了一个所有联系人的数组变量,但是表单需要一个单一联系人的实例。
因为你正在新建联系人,所以在index操作中需要像这样做:
@contact = Contact.new

2

通常情况下,当我们在视图中使用实例变量但它为空时,就会出现这种情况。

例如,在新用户创建表单中,我们使用以下代码:

form_for @user do |f|
....
end

如果在控制器操作中没有初始化@user,那么从我们呈现表单的地方,这种情况可能会发生。


0

在渲染局部视图之前,您需要确保表单局部视图中使用的参数已经定义。

此外,您不需要使用局部视图,您可以直接放置:

<%= render 'contactos/form'  %> 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接