1

アカウントが多くの会場を持つことができるアカウントと会場のテーブルがあります。

アカウント インデックス ページにすべてのアカウントを部分的に表示していますが、それぞれにリンクされている会場の名前を含めたいと考えています。

私が持っているものは次のとおりです。

アカウントの一部

<%= link_to free_account do %>      
    <div class="account_partial">          
      <span class="account_header"><%= free_account.name %></span> - <span class="free_account_highlight">(<%= free_account.role %>)</span><br>

      <%= render :partial => 'venues/account_venue', :collection => @account.venues %>
    </div>
<% end %>

account_venue パーシャル

<%= venue.name %>

次のエラーが表示されます。

アカウント#indexのNoMethodError

nil:NilClass の未定義のメソッド「会場」

抽出されたソース (12 行目あたり):

12: <%= render :partial => 'venues/account_venue', :collection => @account.venues %>

どんな助けでも大歓迎です!

編集

accounts_controller

    class AccountsController < ApplicationController   
    load_and_authorize_resource  

      def index
        @accounts = Account.all(:include => :venues)
      end      
    end

アカウント index.html.erb

<div id="narrow_container">
  <div class="free_accounts_container">
    <h2 class="show_orange">Free accounts</h3>  
    <%= render :partial => 'free_account', :collection => @accounts %>
  </div>

  <div class="premium_accounts_container">
    <h2 class="show_orange">Premium accounts</h3>
    <%= render :partial => 'premium_account', :collection => @accounts %><br><br>
  </div>

  <div class="clearall"></div>

  <div class="button">
    <%= link_to 'add account', new_account_path %>
  </div>
</div>

_free_account.html.erb

<%= link_to free_account do %>
  <% if free_account.role == "free" %>
    <div class="account_partial">

      <span class="account_header"><%= free_account.name %></span> - <span class="free_account_highlight">(<%= free_account.role %>)</span><br>

      <div class="owner_details">
        <span class="pre_account_highlight">Owners username:</span><span class="account_highlight"><%= free_account.user.username %></span>
        <span class="pre_account_highlight">Owners e-mail:</span><span class="account_highlight"><%= free_account.user.email %></span>
      </div>

      <div class="account_details">     
      </div>

      <%= render :partial => 'venues/account_venue', :collection => @account.venues %>
    </div>
  <% else %>         
  <% end %>
<% end %>

アップデート

部分呼び出しを次のように変更すると:

<%= render :partial => 'venues/account_venue', :collection => @accounts %>

account_venue パーシャルは「test」を読み取るだけで、エラーなしで読み込まれますが、新しいアカウント レコードを追加すると、test という単語が 4 回表示されます (4 つのアカウント レコードがあります)。

4

2 に答える 2

2

@account をコントローラー内の何かに設定する必要があり、そのモデル インスタンスは Venues モデルに参加する (または含める) 必要があります。そのようです:

@account = Account.find(params[:id], :include => :venues)

編集: has_many と belongs_to の関係を使用して Account モデルと Venue モデルを既にセットアップしていると思いますか?

編集 2: Accounts#index にアクセスしようとしていることがわかりました。この場合、上記のコードを次のように変更する必要があります (特定のアカウントを見ていないため)。

@accounts = Account.all(:include => :venues)

編集 3:コントローラーとパーシャルのコードも投稿したので、いくつかの点が際立っています。コレクションを使用してパーシャルをレンダリングすると、パーシャル内の結果のオブジェクトの名前は、コレクションではなくパーシャルから派生します。Railsガイドから:

「パーシャルが複数化されたコレクションで呼び出されると、パーシャルの個々のインスタンスは、パーシャルにちなんで名付けられた変数を介して、レンダリングされるコレクションのメンバーにアクセスできます。」

パーシャル_account_venue.html.erbでは<%= venue.name %>、これを に変更する必要があります<%= account_venue.name %>

第二に、パーシャル_free_account.html.erbを呼び出す場所で、という名前のコレクション オブジェクトを参照しています。これはどこから来たのですか? パーシャルコレクションで呼び出されるため、使用する必要があるオブジェクトが呼び出されます。実際、同じパーシャルで以前にこの名前で参照しているとき. したがって、render 部分呼び出しは次のようになります。account_venue@accountfree_accountfree_account<%= free_account.name %>

<%= render :partial => 'venues/account_venue', :collection => free_account.venues %>

お役に立てれば!

于 2012-06-13T23:03:39.410 に答える
0

何にも割り当てていないよう@accountです。free_account代わりにこれが必要ですか?

于 2012-06-13T22:53:33.493 に答える