我正在Rails 4中創建一個公交時間表應用程序,並且我有一個時間表類,每個記錄都有一個公交站,屬於一個公交車服務外鍵。在Rails中自加入查詢。未定義的方法錯誤
我想顯示每個巴士服務提供的原點和目的地點。我在時間表類(bus_service)上進行自加入,以便將屬於特定總線服務的起點和終點站的時間表條目鏈接起來。
型號。 timetable.rb
has_many :timetable_sisters, class_name: "Timetable", primary_key: "bus_service_id", foreign_key: "bus_service_id"
belongs_to :timetable_sister_b, class_name: "Timetable", foreign_key: "bus_service_id"
belongs_to :bus_stop
belongs_to :bus_service
def self.joined(from_stop_id, to_stop_id)
joins(:timetable_sisters).
where("timetables.bus_stop_id = ? AND timetable_sisters_timetables.bus_stop_id = ?", from_stop_id, to_stop_id)
end
控制器:timetable_controller.rb
@timetables = Timetable.joined(params[:from_stop_id], params[:to_stop_id])
查看:index.html.erb
<% @timetables.each do |timetable| %>
<tr>
<td><%= timetable.bus_service_id %></td>
<td><%= timetable.bus_stop.name %></td>
<td><%= timetable.timetable_sister.bus_stop.name %></td>
<td><%= timetable.departure_time %></td>
</td></tr>
<% end %>
生成的SQL看起來不錯:
SELECT "timetables".*
FROM "timetables"
INNER JOIN "timetable_sisters" "timetable_sisters_timetables"
ON "timetable_sisters_timetables"."bus_service_id" = "timetables"."bus_service_id"
WHERE (timetables.bus_stop_id = '25'
AND timetable_sisters_timetables.bus_stop_id = '27')
但我得到一個未定義的方法'timetable_sister'錯誤的視圖文件。 時間表中的NoMethodError#索引
我應該如何在視圖中呼叫姐妹電臺名稱?或者我正在做其他事情。
感謝
您對「timetable_sisters」有'to many'關係。因此你不能調用.timetable_sister。相反,你需要遍歷結果,例如'timetable.timetable_sisters.each' –
這就是偉大的davidsatch。有用。 :)但邏輯上它給了兩個姐姐時間表停止結果。如何將結果限制在列中未列出的結果之前? – Enrique