0

我在模型中有show动作。Exhibitor我想显示一个列表,Meetings其中.ExhibitorSponsor

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 的未定义方法“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.sponsor,并且sponsor属性不是返回集合而是单个对象,因此each该属性返回的对象没有方法。你有belongs_tofrom exhibitorto的连接sponsor,所以一个 exhibitor只属于一个 sponsor

如果您想创建一对多关系,其中一个参展商有多个赞助商,您应该替换

belongs_to :sponsor

has_many :sponsors

如果您想要多对多关系(许多参展商有很多赞助商,赞助商有很多参展商),请检查此问题has_and_belongs_to_many中描述的连接。

当然,如果您的数据库模式具有一对多关系,其中一个赞助商有许多参展商(如您的exhibitor模型所建议的那样)并且您想以一种建议的方式更改模型,请记住更新数据库中的关系。

请务必阅读有关rails 中关联的更多信息。

于 2013-02-11T01:47:02.627 回答