0

レールのあるビューで同じクラスの複数のインスタンスを使用しようとしています。基本的に、すべての属性を含むBranchを表示する必要があり、同じページに空のBranchオブジェクトを必要とするform_forがあります。問題は、コントローラー「@newBranch」で空のブランチインスタンスを作成すると、ビューが最初のインスタンスにアクセスできなくなることです。

ここで私がコントローラーで行うこと:

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をインスタンス化しないと、問題は解消されます。

基本的に、同じビューで同じクラスの2つのインスタンス(たとえば、ある部分では「@branches」、別の部分では「@newBranch」)を使用する必要があります。

解決策は何でしょうか?ありがとうございました。

4

2 に答える 2

0

それらのインスタンスをローカル変数として提供します。

 <%= render :partial => "customers/branch", :collection => @branches, :locals => {:branch => @branch, :customer => @customer} %>

おっと、よく読めませんでした。新しいブランチの場合、連絡先は設定されていないため、nilです。この状況を確認してください。

<% if branch.contact %>
_Your code_
<% else %>
No contact assigned
<% end %>
于 2012-08-22T20:18:14.540 に答える
0

最後に、次の方法でフォーム内のビューに@newBranchと@newContactを作成しました。

<%= form_for(newBranch = Building.new, :html => { :multipart => true }) do |building_form| %>
    <% newBranch.build_contact %>
    etc... etc...
于 2012-08-27T16:52:40.953 に答える