用对象,轨道渲染部分

时间:2014-01-10 10:40:25

标签: ruby-on-rails object partial

我陷入了基本的困境。

我订阅了控制器并且我创建了部分表单,因此我可以从联系页面进行新的订阅。

我的部分看起来像这样:

<%= form_for(@subscribe) do |f| %>
  <% if @subscribe.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(@subscribe.errors.count, "error") %> prohibited this subscribe from being saved:</h2>

      <ul>
      <% @subscribe.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </div>
  <div class="field">
    <%= f.label :subject %><br />
    <%= f.text_field :subject %>
  </div>
  <div class="field">
    <%= f.label :message %><br />
    <%= f.text_area :message %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

我在联系人/索引页面中使用此代码渲染部分:

<%= render 'subscribes/form', :locals => { :subscribe => @subscribe} %>

在此之后我得到了这样的错误:

undefined method `model_name' for NilClass:Class

我试图改变对象名称,一些语法来自卡住的溢出中的similair sugestions。

喜欢:

render "subscribes/form", collection: @subscribe
render :partial => 'subscribes/form', :object => Subscribe.new

我想我正在做一些完全错误或一些简单的错误。我在做。 :)

2 个答案:

答案 0 :(得分:2)

嗯,首先你在视图中根本没有使用传递的参数 - 它是subscribe,而不是@subscribe。它不会改变它应该工作的事实,因为应该设置实例变量。看起来它设置为nil - 您需要检查控制器操作并找出原因。

答案 1 :(得分:0)

除非它是一个拼写错误,否则你第一次实现部分时就会写下这个:

<%= render 'subscribes/form', :locals => { :subscribe => @subscribe} %>

虽然它应该是:

<%= render :partial => 'subscribes/form', :locals => { :subscribe => @subscribe} %>

此外,partial不应该引用@subscribe变量,而应引用subscribe(没有@),因为它是传递给模板的变量名。