[英]Get data from related tables, rails
一些字段表城市
create_table "cities", force: :cascade do |t|
t.string "name"
一些字段表
create_table "orders", force: :cascade do |t|
t.integer "count"
t.integer "first_city_id"
t.integer "last_city_id"
模型訂單
class Order < ActiveRecord::Base
belongs_to :city, inverse_of: :city
end
模范城市
class City < ActiveRecord::Base
has_many :orders, inverse_of: :order
end
訂單視圖中的工作輸出數據
<% @order.each do |orders| %>
<p> <%= orders.count %> </p>
<% end %>
控制器中的方法
def edit
@orders= Order.all
@order=Order.where(:user_id == current_user)
end
如果Order表中的first_city_id或last_city_id包含城市表的ID必需條目,如何從名稱Sity表中獲取值?
您應按以下步驟設置訂單關聯:
class Order < ActiveRecord::Base
belongs_to :first_city, class_name: "City" # it would use first_city_id as the foreign key by default to access city table
belongs_to :last_city, class_name: "City"
end
從訂單中獲得城市的名字很容易:
@order = Order.first
@order.first_city.name
@order.last_city.name
如果要從訂單列表中獲得城市的名字/姓氏,則應使用includes
或joins
來避免n + 1查詢:
@orders = Order.includes(:first_city, :last_city)
<% @orders.each do |order| %>
<p> First City: <%= order.first_city.name %> </p>
<p> Last City: <%= order.last_city.name %> </p>
<% end %>
要么
@orders = Order.
joins("LEFT JOIN cities AS first_cities ON first_cities.id = orders.first_city_id").
joins("LEFT JOIN cities AS last_cities ON last_cities.id = orders.last_city_id").
select("orders.*, first_cities.name AS first_city_name, last_cities.name AS last_city_name")
<% @orders.each do |order| %>
<p> First City: <%= order.first_city_name %> </p>
<p> Last City: <%= order.last_city_name %> </p>
<% end %>
您可以從這兩個文檔“ RailsGuides-Active Record Associations ”和“ RailsGuides-Active Record查詢接口 ”獲得更多信息和幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.