我正试图在带有rails的视图中使用同一类的多个实例。基本上,我需要显示一个Branch及其所有属性,并且在同一页面中,我有一个需要空Branch对象的form_for。问题是,当我在控制器"@newBranch"中创建空的Branch实例时,视图无法再访问第一个
这是我在控制器中所做的:
def show
@customer = Customer.find(params[:id])
@branches = @customer.branches
@newBranch = @customer.branches.new #this is for the form_for
@newContact = @newBranch.build_contact #this is for the fields_for
end
如果我尝试使用集合@branches的单个项,例如:
<div class = "branch_container">
<%= render :partial => "customers/branch", :collection => @branches %>
</div>
然后在分支内部进行部分:
<%= branch.contact.name %>
我有消息:
"nil:NilClass的未定义方法`name'"
所有的模型关联都很好,如果我不实例化@newBranch和@newContact,问题就会消失。
基本上,我需要在同一视图中使用同一类的两个实例(例如,一个分部中的"@branch"和另一个分部的"@newBranch")。
解决方案是什么?非常感谢。
将这些实例作为本地变量提供:
<%= render :partial => "customers/branch", :collection => @branches, :locals => {:branch => @branch, :customer => @customer} %>
哎呀,我读得不好。对于新分支,未设置contact,因此为nil。只是检查一下这种情况。
<% if branch.contact %>
_Your code_
<% else %>
No contact assigned
<% end %>
最后,我以以下方式在表单内的视图中创建了@newBranch和@newContact:
<%= form_for(newBranch = Building.new, :html => { :multipart => true }) do |building_form| %>
<% newBranch.build_contact %>
etc... etc...