我是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>
其中&lt;%= render&#34; contact / new&#34;%&gt;对应于视图中联系的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中更好地学习基础知识,所以任何建议都值得赞赏!谢谢!
答案 0 :(得分:1)
如果要在其他模板中渲染此表单(并且确实如此),则应将其提取为部分命名,例如:_form.html.erb
。
然后,你应该把
<%= render 'contact/form' %>
在任何地方你都需要这部分视图(包括new.html.erb
模板)。
完成后,您应该离开
render :new
在控制器中,因为它与视图中的工作方式稍有不同,它会呈现适当的操作模板而不是部分操作模板。
当然,您需要在需要此部分的任何位置设置@message
变量。或者,你可以放入你的部分:
<%= form_for(@message || Message.new) do |f| %>
有关布局和渲染here的更多信息。