2016-04-14 15 views
0

einige Felder Tabellen StadtHolen von Daten aus verknüpften Tabellen, Schienen

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

einige Felder Tabellen

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

Modell Bestellen

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

Modell Stadt

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

Arbeitsausgangsdaten von Auftrag in Sicht

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

Verfahren Controller

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

Wie man den Wert aus dem Namen Sity Tisch bekommen, wenn first_city_id oder last_city_id in der Order-Tabelle enthält id gewünschten Eintrag aus Stadttisch?

+0

versuchen Sie 'current_user.orders', wenn Sie die richtige Zuordnung im Benutzermodell – uzaif

Antwort

0

Sie sollten die Reihenfolge Verbände wie folgt aufgebaut:

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 

die erste/letzte Name der Stadt aus einem Auftrag bekommen wird einfach:

@order = Order.first 

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

Wenn Sie die erste/letzte Stadt erhalten möchten Name aus einer Bestellliste, sollten Sie includes oder joins verwenden, um die n + 1 Anfrage zu vermeiden:

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

oder

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

können Sie weitere Informationen erhalten und trägt dazu bei, diese beiden Dokumente „RailsGuides - Active Record Associations“ und „RailsGuides - Active Record Query Interface“.

+0

thanks! es ist Arbeit. – fis

Verwandte Themen