我在简单的网站上使用ruby on rails制作联系表单。问题如下。我有主控制器StaticPages
,使用页眉和页脚制作简单的html。现在我创建了控制器Contacts
,它在单独的URL上显示简单联系表单的视图。当我尝试将此表单添加到StaticPages
的联系页面时,它不起作用。我不知道如何告诉rails这个表单不应该从StaticPages
控制器而是从Contacts
控制器找到方法。
这是我的代码:
联系人控制器
class ContactsController < ApplicationController
def new
@contact = Contact.new
end
def create
@contact = Contact.new(params[:contact])
@contact.request = request
if @contact.deliver
flash.now[:notice] = 'Thanks!'
else
flash.now[:error] = 'Error!'
render :new
end
end
end
StaticPages控制器
class StaticPagesController < ApplicationController
def home
end
def about_us
end
def contact_us
end
end
这是我需要处理StaticPage contact_us
的表单<div align="center">
<h3>Send us message</h3>
<%= simple_form_for @contact, :html => {:class => 'form-horizontal' } do |f| %>
<%= f.input :name, :required => true %>
<%= f.input :email, :required => true %>
<%= f.input :message, :as => :text, :required => true %>
<div class= "hidden">
<%= f.input :nickname, :hint => 'Leave this field blank!' %>
</div>
<div>
</br>
<%= f.button :submit, 'Send', :class=> "btn btn-primary" %>
</div>
<% end %>
</div>
我想我需要告诉rails这个表单应该寻找特定的控制器,但我不知道如何。
请帮忙。
答案 0 :(得分:1)
这不是你想要的,但它应该按你想要的方式工作,你应该有一个contacts_helper.rb
,看起来应该是这样的
module ContactsHelper
def contact_us
@contact = Contact.new
end
end
在你的偏见中,你想要
<%= simple_form_for contact_us, :html => {:class => 'form-horizontal' } do |f| %>
最后,您需要在application_controller.rb
class ApplicationController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
...
include ContactsHelper
...
end
答案 1 :(得分:0)
一个简单的选择是StaticPages
contact_us
操作redirect_to new_contact_url
(假设表单位于app/views/contacts/new.html.erb
)
或者,您可以将表单放在app/views/shared/_new_contact.html.erb
中,然后将@contact = Contact.new
放入contact_us
操作中,并使用contact_us
模板render partial: "shared/new_contact", locals: { :contact => @contact }
。< / p>