Ruby on rails 单页控制器中的Rails ContactUs模型
Hi有一个没有模型的简单rails站点,它只用于服务静态页面 该站点有一个页面控制器,但它只提供一个由部分组成的主页 类似于Ruby on rails 单页控制器中的Rails ContactUs模型,ruby-on-rails,ruby-on-rails-3,actionmailer,Ruby On Rails,Ruby On Rails 3,Actionmailer,Hi有一个没有模型的简单rails站点,它只用于服务静态页面 该站点有一个页面控制器,但它只提供一个由部分组成的主页 类似于app/views/pages/home.html.erb <%= render 'layouts/about' %> <%= render 'layouts/services' %> <%= render 'layouts/rooms' %> <%= render 'layouts/breakfast' %> <%=
app/views/pages/home.html.erb
<%= render 'layouts/about' %>
<%= render 'layouts/services' %>
<%= render 'layouts/rooms' %>
<%= render 'layouts/breakfast' %>
<%= render 'layouts/guestbook' %>
<%= render 'layouts/contact' %>
主页使用一些html5/javascript自动滚动页面。因此,每个部分都以#开头,以允许自动滚动到该部分
看一看
这一切都很好。
现在我的问题是:我想添加一个rails类型的ContactUS页面
以下是各种教程:
它们都指向拥有一个消息模型、ActionMailer和contact controller,如果您想拥有一个单独的contact controller,那么它就可以工作
我一直在想如何构建一个contactUs表单,但将其保留在pages控制器中,以允许自动滚动,因为使用contact控制器似乎会改变所有URL路由。我知道这可能不是Rails的方式,但任何帮助都会很好
希望这是有道理的。有什么想法吗?我会做以下几点:
添加一个名为“表单”的新模型,app/models/Form.rb
class Form
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
attr_accessor :name, :email, :message
validates :name, presence: true
validates :email, presence: true, email: true
validates :message, presence: true
def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end
def persisted?
false
end
end
在控制器上修改您的页面:
def new
@form = Form.new
end
def create
@form = Form.new(params[:form])
if @form.valid?
redirect_to root_path, notice: "Thanks!")
else
render "new"
end
end
将表单html代码添加到应用程序/views/pages/home.html.erb
<%= form_for @form do |f| %>
<div class="field">
<%= f.label :name %>
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :email %>
<%= f.email_field :email %>
</div>
<div class="field">
<%= f.label :message %>
<%= f.text_area :message %>
</div>
<div class="actions">
<%= f.submit "Submit" %>
</div>
就这样,你有了你的联系方式
这段代码是从我在github上的一个gem中收集的:
为了进行测试,您可以将此gem添加到gemfile中,并运行github自述文件中描述的文件生成器。我将执行以下操作:
添加一个名为“表单”的新模型,app/models/Form.rb
class Form
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
attr_accessor :name, :email, :message
validates :name, presence: true
validates :email, presence: true, email: true
validates :message, presence: true
def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end
def persisted?
false
end
end
在控制器上修改您的页面:
def new
@form = Form.new
end
def create
@form = Form.new(params[:form])
if @form.valid?
redirect_to root_path, notice: "Thanks!")
else
render "new"
end
end
将表单html代码添加到应用程序/views/pages/home.html.erb
<%= form_for @form do |f| %>
<div class="field">
<%= f.label :name %>
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :email %>
<%= f.email_field :email %>
</div>
<div class="field">
<%= f.label :message %>
<%= f.text_area :message %>
</div>
<div class="actions">
<%= f.submit "Submit" %>
</div>
就这样,你有了你的联系方式
这段代码是从我在github上的一个gem中收集的:
对于测试,您可以将此gem添加到gemfile并运行github自述文件中所述的文件生成器。如果您的问题是使用单个控制器解决的,为什么不将联系人方法放在该控制器中?您可以从pages controller中联系人页面的联系人视图中选择
。这需要创建联系人控制器和视图。如果您的问题是使用单个控制器解决的,为什么不将联系人方法放在该控制器中?您可以从页面控制器中联系人页面的联系人视图中选择
。这将需要创建一个联系人控制器和视图。感谢我最后去了那里,我现在唯一的问题是该站点有一个带有javascript和html5的奇特模板,老实说,我不确定它是如何工作的,但是主页是在可滚动的部分,在完成表单后,我想留在联系人部分,而不是根部分。i、 是的,而不是。你知道我如何通过重定向而不是主路径传递url吗?也许这些答案可以帮助你所以像这样重定向:redirect_to:action=>'page',:anchor=>'contact'谢谢我最后去了那里,我现在唯一的问题是这个网站有一个带有javascript和html5的奇特模板,老实说,我不确定它是如何工作的,但是主页是在可滚动的部分,在完成表单后,我想留在联系人部分,而不是根部分。i、 是的,而不是。你知道我如何通过重定向而不是主路径传递url吗?也许这些答案可以帮助你所以像这样重定向:重定向到:action=>'page',:anchor=>'contact'