Ruby on rails 4 第一个参数不能包含nil或为空

Ruby on rails 4 第一个参数不能包含nil或为空,ruby-on-rails-4,erb,Ruby On Rails 4,Erb,我正在基于Futureme.org制作一个单页应用程序进行实践。用户进入主页,看到一个表格,上面写着他们的电子邮件地址、主题和邮件正文,然后发送出去 我遇到的问题是,我得到一个错误“表单中的第一个参数不能包含nil或为空”。这是我的密码 模型 class Letter < ActiveRecord::Base VALID_EMAIL_REGEX = /\A[\w+\-,]+@[a-z\d\-.]+\.[a-z]+\z/i validates_presence_of :em

我正在基于Futureme.org制作一个单页应用程序进行实践。用户进入主页,看到一个表格,上面写着他们的电子邮件地址、主题和邮件正文,然后发送出去

我遇到的问题是,我得到一个错误“表单中的第一个参数不能包含nil或为空”。这是我的密码

模型

class Letter < ActiveRecord::Base

    VALID_EMAIL_REGEX = /\A[\w+\-,]+@[a-z\d\-.]+\.[a-z]+\z/i
    validates_presence_of :email, presence: true, format: { with: VALID_EMAIL_REGEX },
                          uniqueness: { case_sensitive: false }

    validates_length_of :subject, presence: true, length: { maximum: 50 }

    validates_presence_of :message


end
类字母
控制器

class LettersController < ApplicationController

    def new
        @letter = Letter.new
    end

    def create
        @letter = Letter.new(params[:letter])

        if @letter.save
            redirect_to letters_path, :notice => "Your letter was sent!"
        else
            render "new"
        end
    end

end
类字母控制器“您的信函已发送!”
其他的
呈现“新”
结束
结束
结束
视图形式

 <%= form_for @letter, :html => {:class => 'form-horizontal'} do |f| %>
     <% if @letter.errors.any? %>
       <div class="error_messages">
       <h2><%= pluralize(@letter.errors.count, "error")%>stopped this message from being saved</h2>

       <ul>
       <% @letter.errors.full_messages.each do |msg| %>
         <li><%= msg %></li>  
        <% end %>
      </ul>

    <% end %>  






  <div class="field">
      <%= f.label :email %><br />
      <%= f.text_field :email %>
    </div>
    <div class="field">
      <%= f.label :subject %><br />
      <%= f.text_field :subject %><br />
    </div>
    <div class="field">
      <%= f.label :message, "Message" %><br />
      <%= f.text_area :message, size: "60x10" %>
    </div>
    <div class="actions"><%= f.submit "Submit", class: "btn btn-small btn-primary" %></div>

  <% end %> 
{:class=>'form horizontal'}do | f |%>
已停止保存此邮件




该表格位于主页上的“欢迎控制器”中


任何帮助都会很好

当表单在其他视图上绘制时,看起来您在实际操作中构建了字母
new

您应该将
@letter=letter.new
移动到适当的操作

其中一种变体是:

#WelcomeController
def home
  @letter = Letter.new
end

#LettersController
def create
  @letter = Letter.new(params[:letter])
  if @letter.save
    redirect_to letters_path, :notice => "Your letter was sent!"
  else
    render "welcome/home"
  end
end

如果您在操作中准备了一些数据,请小心
home
,当验证失败时,您应该注意初始化它们以执行操作
create
,因为您呈现“welcome/home”视图

在其他视图上绘制表单时,您看起来像是在操作中构建信函
new

您应该将
@letter=letter.new
移动到适当的操作

其中一种变体是:

#WelcomeController
def home
  @letter = Letter.new
end

#LettersController
def create
  @letter = Letter.new(params[:letter])
  if @letter.save
    redirect_to letters_path, :notice => "Your letter was sent!"
  else
    render "welcome/home"
  end
end

如果您在操作中准备了一些数据,请小心
home
,您应该注意在验证失败时初始化这些数据,以便执行操作
create
,因为您提供了“欢迎/主页”视图

谢谢您的回答。你能澄清一下你所说的采取适当行动的意思吗?我尝试将“新”操作移到欢迎控制器而不是信件控制器,但仍然不起作用。谢谢您的回答。你能澄清一下你所说的采取适当行动的意思吗?我尝试将“新”操作移动到欢迎控制器而不是字母控制器,但仍然不起作用