我正在尝试在带有rails的视图中使用同一个类的多个实例。 基本上我需要显示一个具有所有属性的分支,并且在同一页面中我有一个需要空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”
所有模型关联都可以正常工作,如果我没有实例化@newBranch和@newContact,问题就会消失。
基本上我需要在同一个视图中使用同一个Class的两个实例(例如一个部分中的“@branches”和另一个中的“@newBranch”)。
可能是什么解决方案? 谢谢。
答案 0 :(得分:0)
将这些实例提供为本地变量:
<%= render :partial => "customers/branch", :collection => @branches, :locals => {:branch => @branch, :customer => @customer} %>
哎哟读得不好。对于新分支,未设置联系,因此为零。请检查一下这种情况。
<% if branch.contact %>
_Your code_
<% else %>
No contact assigned
<% end %>
答案 1 :(得分:0)
最后,我按照以下方式在表单内的视图中创建了@newBranch和@newContact:
<%= form_for(newBranch = Building.new, :html => { :multipart => true }) do |building_form| %>
<% newBranch.build_contact %>
etc... etc...