我将详细设置我的问题后面的场景。
这是场景:
我有一个联系人控制器,具有新的和创建操作。这是我希望用户填写并存储他们的回复的表格。
联系控制器:
class ContactController < ApplicationController
  def new
    @contact = Contact.new
  end
  def create
    @contact = Contact.new(params[:contact])
    respond_to do |format|
      if @contact.save
        format.html { redirect_to social_path, notice: 'Message sent successfully!' }
      else
       format.html { render action: 'new' }
      end
    end
  end
end
我有一个相应的 _form.html.erb 部分,以及一个 new.html.erb 视图,它会像您一样呈现表单部分。这些视图都位于联系人视图文件夹内,并带有相应的路由。
_form.html.erb
<%= form_for @contact do |f| %>
  <% if @contact.errors.any? %>
    <h2>
      <%= pluralize(@contact.errors.count, "error") %> prohibited this contact from being saved:
    </h2>
    <ul>
    <% @contact.errors.full_messages.each do |msg| %>
      <li><%= msg %></li>
    <% end %>
    </ul>
  <% end %>
<div class="row collapse">
  <div class="large-2 columns">
    <%= f.label :name, :class => 'inline' %>
  </div>
  <div class="large-10 columns">
    <%= f.text_field :name, :placeholder => 'Kenny Powers' %>
  </div>
</div>
<div class="row collapse">
  <div class="large-2 columns">
    <%= f.label :subject %>
  </div>
  <div class="large-10 columns">
    <%= f.text_field :subject %>
  </div>
</div>
<div class="row collapse">
  <div class="large-2 columns">
    <%= f.label :email %>
  </div>
  <div class="large-10 columns">
    <%= f.text_field :email, :placeholder => 'kennypowers@example.com' %>
  </div>
</div>
<div class="row collapse">
  <div class="large-2 columns">
    <%= f.label :message %>
  </div>
  <div class="large-10 columns">
    <%= f.text_area :message %>
  </div>
</div>
<div class="row collapse">
  <div class="large-2 columns end">
    <%= f.submit %>
  </div>
</div>
<% end %>
new.html.erb <%= render 'contact/form' %>
我创建了一个 static_pages 控制器,因为我想让我的大部分静态页面与加载动态内容的页面分开。
在 static_pages 控制器内部,我有一个为空的社交控制器操作。我在位于 static_pages 视图文件夹中的 social.html.erb 上显示静态内容,匹配路由如下
match 'social' => 'static_pages#social'
社会.html.erb
<%= render :template => 'contact/new', :@contact => Contact.new %>
静态页面控制器
def social
end
酷,社交页面完美呈现。
现在对于我混淆的部分:
如何在社交页面中呈现联系表格?因为它位于我拥有的 social.html.erb 文件中
<%= render template: 'contact/new' %>
这给了我
ActionView::MissingTemplate in Static_pages#social
Showing app/views/contact/new.html.erb where line #1 raised:
1: <%= render 'form' %>
它会为contact/new.html.erb 中的_form.html.erb 引发缺少模板错误。如果我尝试通过添加来指定表单位置
<%= render 'contact/form' %>
我得到一个undefined method model_name for NilClass:Class错误。
我这样做完全错了吗?有没有更好的方法来做我正在尝试的事情?有人可以给我一个外行的解释吗?
我知道将表单部分渲染到其他控制器中也有类似的问题,但它们只是一种解决方案。我非常感谢支持为什么会发生这种情况的话语,或者支持更好/正确的做事方式的话语。
如果您需要更多信息/特定代码,请告诉我。