Rails如何在一个视图中对同一个类使用多个变量

时间:2012-08-22 20:12:04

标签: ruby-on-rails ruby-on-rails-3

我正在尝试在带有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”)。

可能是什么解决方案? 谢谢。

2 个答案:

答案 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...