我试图显示两个表之间的关系,但我得到了
undefined method `guiders' for # <ActiveRecord::Relation::ActiveRecord_Relation_Trip:0x3865e78>
- showguiders的控制器代码 -
class ShowguidersController < ApplicationController
def guidersout
r = Trip.all
@guiders_out = r.guiders
end
end
指导者模型
class Guider < ActiveRecord::Base
belongs_to :trip
end
旅行模型
class Trip < ActiveRecord::Base
has_many :guides
end
查看
这就是我的教授对他的看法
<center><h1> Here are our Guides </h1>
<br /><br /><br /><br />
<table width = 60% border =1>
<tr><th>Guide # </th><th> Name </th> <th> Phone </th> </tr>
<% @guiders_out.each do |m| %>
<tr><td> <%= m.id %> </tr> </td> <tr><td> <%= m.name %> </tr> </td> <tr><td> <%= m.phone %> </tr> </td>
<% end %>
</table></center>
<br /><br /><br /><br />
答案 0 :(得分:1)
您正在调用ActiveRecord模型集合上的方法(即Relation
)。
要返回每个Guider
的每个Trip
的集合,您首先需要正确建模您的关联。试试这个
class Guider < ActiveRecord::Base
belongs_to :trip
end
class Trip < ActiveRecord::Base
# NOTE: you must match your association name with its associated class
has_many :guiders
end
现在你可以像这样聚合控制器中的集合
class ShowguidersController < ApplicationController
def guidersout
@guiders_out = Trip.all.collect(&:guiders).flatten
end
end
答案 1 :(得分:1)
一个Trip
有很多guiders
,但不是集合。
如果你想获得所有这些,请使用:
@guiders_out = r.map(&:guiders)
答案 2 :(得分:1)
您需要与所有旅程相关联的所有导游。 试试这段代码
def guidersout
@guiders_out = Guider.joins(:trip).all
end
我发现你必须在你的模型中进行修改。
class Trip < ActiveRecord::Base
has_many :guides, class_name: 'Guider', foreign_key: 'trip_id'
end
修改模型后,您可以尝试在控制器中使用以下代码。
def guidersout
@guiders_out = Trip.all.map{|t| t.guides}.flatten
end
在您看来,请更改表格。
<table width = 60% border =1>
<tr>
<th>Guide # </th>
<th> Name </th>
<th> Phone </th>
</tr>
<% @guiders_out.each do |m| %>
<tr>
<td> <%= m.id %> </td>
<td> <%= m.name %> </td>
<td> <%= m.phone %></td>
</tr>
<% end %>