简体   繁体   English

从相关表,Rails获取数据

[英]Get data from related tables, rails

some fields tables City 一些字段表城市

create_table "cities", force: :cascade do |t|
t.string "name"

some fields tables Order 一些字段表

create_table "orders", force: :cascade do |t|
t.integer "count"
t.integer "first_city_id"
t.integer "last_city_id"

model Order 模型订单

class Order < ActiveRecord::Base
belongs_to :city, inverse_of: :city
end

model City 模范城市

class City < ActiveRecord::Base
has_many :orders, inverse_of: :order
end

working output data from Order in view 订单视图中的工作输出数据

<% @order.each do |orders| %>
<p> <%= orders.count %> </p>
<% end %>

Method in controller 控制器中的方法

def edit
@orders= Order.all
@order=Order.where(:user_id == current_user)
end

How to get the value from the name Sity table if first_city_id or last_city_id in the Order table contains id required entry of City Table? 如果Order表中的first_city_id或last_city_id包含城市表的ID必需条目,如何从名称Sity表中获取值?

You should setup the order associations as follows: 您应按以下步骤设置订单关联:

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

Getting the first/last city name from an order becomes easy: 从订单中获得城市的名字很容易:

@order = Order.first

@order.first_city.name
@order.last_city.name

If you want to get the first/last city name from an order list, you should use includes or joins to avoid the n+1 query: 如果要从订单列表中获得城市的名字/姓氏,则应使用includesjoins来避免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 %>

or 要么

@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 %>

You can get more information and helps from these two docs " RailsGuides - Active Record Associations " and " RailsGuides - Active Record Query Interface ". 您可以从这两个文档“ RailsGuides-Active Record Associations ”和“ RailsGuides-Active Record查询接口 ”获得更多信息和帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM