我是rails的新手,还在研究基础知识,所以非常感谢任何提示和建议!
我已经在一个网站上制作了一个功能性联系人页面,我希望能够在不同的页面上呈现选项卡内的表单和功能。我在views文件夹的static_pages文件夹中有以下代码:
<div id="tabs">
<ul>
<li><a href="#tabs-1">About</a></li>
<li><a href="#tabs-5">Contact</a></li>
</ul>
<div id="tabs-1">
<%= render "shared/about"%>
</div>
<div id="tabs-5">
<%= render "contact/new"%>
</div>其中<%= render“contact /%>”对应于视图中contact中的new.html.erb文件。
我的routes.rb中的相关代码是
match 'contact' => 'contact#new', :as => 'contact', :via => :get
match 'contact' => 'contact#create', :as => 'contact', :via => :post这是我的控制器:
class ContactController < ApplicationController
def new
@message = Message.new
end
def create
@message = Message.new(params[:message])
if @message.valid?
NotificationsMailer.contact_pr(@message).deliver
redirect_to(root_path, :notice => "Message was successfully sent.")
else
flash.now.alert = "Please fill all fields."
render :new
end
end
end然而,似乎无论我怎么尝试,我仍然无法呈现表单。如果这是一个非常简单的问题,我很抱歉,我最感兴趣的是更好地掌握Ruby on Rails的基础知识,所以任何建议都是非常感谢的!谢谢!
发布于 2013-07-17 16:16:42
如果您希望在其他模板中呈现此表单(确实如此),则应将其提取到名为例如:_form.html.erb的部分模板中。
然后,您应该将
<%= render 'contact/form' %>在视图中需要这个部分的地方(包括new.html.erb模板)。当你做完这个,你应该离开
render :new在控制器中,因为它的工作方式与视图略有不同,并且它呈现适当的操作模板而不是部分。当然,您需要在需要这个部分的地方设置@message变量。或者,您可以在您的部分中添加:
<%= form_for(@message || Message.new) do |f| %>更多关于布局和渲染here的信息。
https://stackoverflow.com/questions/17694278
复制相似问题