0

私はモデルshowでアクションを持っています。がであるのExhibitor一覧を表示したい。MeetingsExhibitorSponsor

Exhibitorモデル:

class Exhibitor < ActiveRecord::Base
 attr_accessible :description, :name, :exhibitor_category, :sponsor,    :exhibitor_category_id

 validates :name, :presence => true
 validates :description, :presence => true
 validates :exhibitor_category, :presence => true

 belongs_to :exhibitor_category
 belongs_to :sponsor
 end

showアクション:

def show
    @exhibitor = Exhibitor.find(params[:id])
    @sponsoredmeetings = @exhibitor.sponsor

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @exhibitor }
    end
  end

show見る:

    <p>
    <b>Meetings:</b>
    <% @sponsoredmeetings.each do |c| %>
    <%= c.meetings %>
    <% end %>
    </p>

ページを実行すると、次のようになります。

出展者の NoMethodError#show

# Rails.root の undefined method `each': C:/RailsInstaller/Ruby1.9.3/eventmanager

アプリケーション トレース | フレームワーク トレース | フルトレース app/controllers/exhibitors_controller.rb:17:in `show' リクエスト

パラメーター:

{"id"=>"1"} セッション ダンプを表示

このエラーが発生し続けるために、コントローラーページで何が間違っていますか?

4

1 に答える 1

0

エラーは@sponsoredmeetings.eachあなたの見解に関連しています。

@sponsoredmeetingsの値があり、モデルでわかるように@exhibitor.sponsorsponsor属性はコレクションを返すものではなく、単一のオブジェクトであるためeach、この属性によって返されるオブジェクトのメソッドはありません。からへのbelongs_to接続があるため、 1つは1 つのみに属します。exhibitorsponsor exhibitor sponsor

1 つの出展者が多数のスポンサーを持つ 1 対多の関係を作成する場合は、

belongs_to :sponsor

has_many :sponsors

多対多の関係(多くの出展者には多くのスポンサーがあり、スポンサーには多くの出展者がいます)が必要な場合は、この質問has_and_belongs_to_manyに記載されている接続を確認してください。

もちろん、データベース スキーマに 1 対多の関係があり、1 つのスポンサーが (exhibitorモデルが示唆するように) 多くの出展者を持ち、提案された方法のいずれかでモデルを変更したい場合は、データベースの関係を更新することを忘れないでください。

rails のアソシエーションの詳細を必ずお読みください。

于 2013-02-11T01:47:02.627 に答える