这是我_form.html.erb
<%= form_for(@score) do |f| %>
<% if @score.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@score.errors.count, "error") %> prohibited this score from being saved:</h2>
<ul>
<% @score.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :client_id %><br />
<%= f.select :client_id, @clients.collect { |c| [c.name, c.id] }, {:include_blank => 'None'} %>
</div>
<div class="field">
<%= f.label :firm_size %><br />
<%= f.text_field :firm_size %>
</div>
.
.
.
<div class="actions">
<%= f.submit %>
</div>
<% end %>
当我有一个用于创建Score
的通用名称并且有一组客户端通过clients
通过控制器传入时,此部分工作。
问题在于只有一个client
记录....比如说:
myapp.com/client/6/scores/new/
鉴于我在params中有一个client_id
,它给我一个零错误:
undefined method `collect' for nil:NilClass
如何针对单个@client
记录解决此问题?
答案 0 :(得分:1)
看起来您正在使用嵌套资源,因此对于myapp.com/client/6/scores/new/
,您的new
中的ScoreController
方法应该被调用。
在这个方法中(或者在过滤器之前),我假设你有一行类似的东西:
@client = Client.find(params[:client_id])
现在,如果你想以你的方式使用你的部分,你要么必须确保有一个对象响应方法collect
(即一个数组),其名称为{{1或者你可以继续重写你的部分并在@clients
部分中将其拆分......
您获得的错误消息基本上意味着,当呈现if
方法时,没有名为ScoreController#new
的对象,因此它为零,而@clients
没有方法NilClass
< / p>
所以我会在你的collect
方法中执行以下操作:
ScoreController#new
现在,我不确定这是一个优雅的解决方案,但它应该让你继续......