2013-10-29 30 views
0

我試圖建立在Rails的基本聯繫表格,並不斷拋出這個錯誤:軌道4的接觸形式的錯誤

在形式上第一個參數不能包含零或爲空

Extracted source (around line #1): 
<%= form_for contact do |f| %> 
<div> 
<%= f.label :name %><br/> 
<%= f.text_field :name %> 

這裏我的代碼。

我渲染的部分與此:

<%= render 'form', :contact => @contact %> 

這是部分:

<%= form_for contact do |f| %> 
<div> 
<%= f.label :name %><br/> 
<%= f.text_field :name %> 
</div> 
<div> 
<%= f.label :email %><br/> 
<%= f.text_field :email %> 
</div> 
<div> 
<%= f.label :message %><br/> 
<%= f.text_area :message %> 
</div> 
<div> 
<%= f.submit "Send" %> 
</div> 
<% end %> 

這是我的模型,contact.rb

class Contact 
extend ActiveModel::Naming 
include ActiveModel::Conversion 
include ActiveModel::Validations 

attr_accessor :name, :email, :message 

validates :name, 
     :presence => true 

validates :email, 
     :format => { :with => /\b[A-Z0-9._%a-z\-][email protected](?:[A-Z0-9a-z\-]+\.)+[A-Za-z]{2,4}\z/ } 

validates :message, 
     :length => { :minimum => 10, :maximum => 1000 } 

def initialize(attributes = {}) 
attributes.each do |name, value| 
    send("#{name}=", value) 
end 
end 

def deliver 
return false unless valid? 
true 
end 

def persisted? 
false 
end 
end 

我的控制器:

class ContactController < ApplicationController 

def new 
@contact = Contact.new 
end 

def create 
@contact = Contact.new(params[:contact]) 
if @contact.deliver 
    flash.now[:error] = nil 
    flash.now[:notice] = "Thanks for contacting us! We'll get back to you within 24 hours!." 
else 
    flash.now[:error] = "Hmm. We couldn't send your message. Double check that you filled in the whole form." 
    render :new 
end 
end 

end 

在此先感謝您的幫助!我SO沖刷而一直無法到目前爲止解決這個問題...

回答

2

渲染的形式作爲部分替代和使用locals選項來傳遞您的變量:

<%= render partial: "form", locals: {contact: @contact} %> 
+0

謝謝 - 即拋出相同的錯誤。 – Taylor

+0

你確定'@ contact'不是空的嗎?嘗試添加一個'<%= @ contact.inspect%>'並註釋掉render標籤以查看'@ contact'變量是否包含任何內容。 – jvperrin

+0

啊 - 顯示'無',所以我想它是空的。鑑於上面的代碼,你知道我該如何解決這個問題嗎? – Taylor

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

我的猜測是你的@contact被設置爲零,並且它不是來自你的聯繫人#新動作。

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

雖然不建議:

,如果你做到這一點只會工作。

您需要檢查包含表單的視圖實際上是否由您的ContactController的新操作呈現。欲瞭解更多信息,請參閱https://github.com/plataformatec/devise/issues/2451