undefined方法rails活动记录

时间:2014-03-06 05:22:54

标签: ruby-on-rails

我试图显示两个表之间的关系,但我得到了

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 />

3 个答案:

答案 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 %>