我在show
模型中有Exhibitor
个动作。我想显示Meetings
为Exhibitor
Sponsor
的{{1}}列表。
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:在'show'Request
中参数:
{“id”=&gt;“1”}显示会话转储
我在控制器页面上做错了什么来继续收到此错误?
答案 0 :(得分:0)
错误与您视图中的@sponsoredmeetings.each
相关联。
@sponsoredmeetings
的值为@exhibitor.sponsor
,sponsor
属性,正如我在模型中看到的那样,不是返回集合而是单个对象,因此没有{{1此属性返回的对象的方法。您从each
到belongs_to
有exhibitor
个连接,因此一个 sponsor
仅属于一个 exhibitor
}。
如果您想创建一对多的关系,一个参展商有很多赞助商,您应该更换
sponsor
与
belongs_to :sponsor
如果您想要多对多的关系(许多exibitior有很多赞助商,赞助商有很多参展商),请检查this question中描述的has_many :sponsors
连接。
当然,如果您的数据库架构有一对多的关系,其中一个赞助商有很多参展商(正如您的has_and_belongs_to_many
模型建议的那样)并且您想要以一种建议的方式更改模型,请记住更新关系在数据库中。
请务必详细了解associations in rails。