控制器的变量不适用于放置在partial内的表单

时间:2013-10-26 11:05:47

标签: ruby-on-rails-4

我有 - 可能是愚蠢的 - 渲染我的表单的问题。 我有两个控制器:ContentController - 负责选项卡页面的内容视图和为处理数据库模型而生成的ParticipantsController脚手架。 我想制作一个用于签署新参与者的表单并将其放入部分_new.html.erb中,然后将其嵌入到我的ContentController的“schedule”视图中。 我真的很喜欢rails,所以也许我错过了一些东西,但是当我把这样的形式放在一边时:

<%= form_for @participant do |f| %> 
    <%= f.label :name %>
    <%= f.text_field :name %>
    ...

我收到了一个错误:

First argument in form cannot contain nil or be empty

在我的控制器中我有:

def new
    @participant = Participant.new
end

所以我想一切都应该没问题。

当我在表单中使用Participant.new而不是@participant时,一切都呈现正确;但我不确定这是否适用于数据库,我的意思是我希望在点击提交按钮后在数据库中创建新的参与者记录。

我希望我能为你们传递足够的信息来帮助我。 提前致谢

1 个答案:

答案 0 :(得分:1)

错误消息告诉您不能拥有以下内容:

<%= form_for nil do |f| %>
<%= form_for [] do |f| %>

我的猜测是你的@participant设置为nil并且它不是来自你的Participantst#new action。

只要你这样做就行了:

<%= form_for Participant.new do |f| %>

虽然不推荐。

您需要检查包含表单的视图是否实际由ParticipantsController的新操作呈现。 有关详细信息,请参阅https://github.com/plataformatec/devise/issues/2451