我正在一页布局上创建一个Contact Me表单。我有大部分代码设置但似乎无法解决出现的错误。我将把所有代码都放在下面的错误中。注意:我还没有安装邮件程序,一旦正确设置此代码,我就会这样做:)
#routes
Rails.application.routes.draw do
resources :contacts, only: [:new, :create]
devise_for :users
root 'welcome#index'
end
#form
<%= form_for @contact do |x| %>
<div class="field">
<%= x.label :name %><br />
<%= x.text_field :name %>
<%= x.submit %>
</div>
<% end %>
#ContactsController
class ContactsController < ApplicationController
def new
@contact = Contact.new
end
def create
@contact = Contact.new(contact_params)
if @contact.save
flash[:notice] = "Your message has been sent!"
redirect_to :action => :index
else
flash[:notice] = "Try Again!"
end
end
private
def contact_params
params.require(:contact).permit(:name)
end
end
#Index View
<%= render partial: 'contacts/form' %>
我主要收到的错误是First argument in form cannot contain nil or be empty
。我还尝试将@contact = Contact.new
置于欢迎控制器的索引操作中,但这引发了这个问题:Unable to autoload constant Contact, expected .../app/mailers/contact.rb to define it
如果您有任何建议,想法或意见,请告诉我们=)非常感谢任何帮助,谢谢!
PS:如果需要任何进一步的代码或信息,请问。有各种列的联系模型。
更新
我现在在我的欢迎控制器的索引操作中有@contact = Contact.new
。最终试图解决我收到的邮件问题。
答案 0 :(得分:1)
首先你的路线是错的(BTW资源:联络线应该在文件的顶部),把它想象成一个从上到下的瀑布。
如果你去/路线,你会发现你只创建了:创建路线,因为只有:#:create]&#34;资源声明:联系部分路线文件。
它可能看起来很直观,但您需要:新路线,因为这会呈现您在控制器中的新视图。基本上是restful rails路由配对:new提交给:create和:edit提交到:update。所以:创建和:更新没有视图,如果出现问题,他们会渲染:new或:编辑视图。
答案 1 :(得分:1)
这可能不是您问题的答案,但在此框中发布代码比在评论框中发布代码更容易。我看到了一些需要解决的问题
def create
@contact = Contact.create(contact_params) #change to: @contact = Contact.new(contact_params)
if @contact.save
flash.notice = "Your message has been sent!" #change to: flash[:notice] = "Your message has been sent!"
redirect_to :action => :index
else
flash.notice = "Try Again!" #change to: flash[:notice] = "Try Again!"
end
end
答案 2 :(得分:1)
感谢大家的意见,但我发现了我的错误。邮件的名称出现了问题。当需要联系contact_mailer.rb时,我有contact.rb。
谢谢大家的其他建议!