联系我单页面布局表格

时间:2015-08-18 16:15:18

标签: ruby-on-rails ruby forms ruby-on-rails-4

我正在一页布局上创建一个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。最终试图解决我收到的邮件问题。

3 个答案:

答案 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。

谢谢大家的其他建议!