我陷入了基本的困境。
我订阅了控制器并且我创建了部分表单,因此我可以从联系页面进行新的订阅。
我的部分看起来像这样:
<%= 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
我想我正在做一些完全错误或一些简单的错误。我在做。 :)
答案 0 :(得分:2)
嗯,首先你在视图中根本没有使用传递的参数 - 它是subscribe
,而不是@subscribe
。它不会改变它应该工作的事实,因为应该设置实例变量。看起来它设置为nil - 您需要检查控制器操作并找出原因。
答案 1 :(得分:0)
除非它是一个拼写错误,否则你第一次实现部分时就会写下这个:
<%= render 'subscribes/form', :locals => { :subscribe => @subscribe} %>
虽然它应该是:
<%= render :partial => 'subscribes/form', :locals => { :subscribe => @subscribe} %>
此外,partial不应该引用@subscribe
变量,而应引用subscribe
(没有@),因为它是传递给模板的变量名。