2013-10-31 13 views
6
class Guardian < ActiveRecord::Base 
    has_many :patients 
    has_one :user, as: :profile 
    accepts_nested_attributes_for :user 
end 


class User < ActiveRecord::Base 
    belongs_to :profile, :polymorphic => true 

    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 
end 

Benutzermigrationverbinden zwei Tabellen Datenschienen erhalten 4

class DeviseCreateUsers < ActiveRecord::Migration 
    def change 
    create_table(:users) do |t| 
     ## Database authenticatable 
     t.string :email,    :null => false, :default => "" 
     t.string :encrypted_password, :null => false, :default => "" 
     t.string :username, :null => false 
     t.string :address 
     t.integer :age 
     t.string :gender 
     t.string :name 
     t.integer :profile_id 
     t.string :profile_type 

     ## Recoverable 
     t.string :reset_password_token 
     t.datetime :reset_password_sent_at 

     ## Rememberable 
     t.datetime :remember_created_at 

     ## Trackable 
     t.integer :sign_in_count, :default => 0, :null => false 
     t.datetime :current_sign_in_at 
     t.datetime :last_sign_in_at 
     t.string :current_sign_in_ip 
     t.string :last_sign_in_ip 


     t.timestamps 
    end 

    add_index :users, :email,    :unique => true 
    add_index :users, :reset_password_token, :unique => true 
    end 
end 

class DeviseCreateUsers < ActiveRecord::Migration 
    def change 
    create_table(:users) do |t| 
     ## Database authenticatable 
     t.string :email,    :null => false, :default => "" 
     t.string :encrypted_password, :null => false, :default => "" 
     t.string :username, :null => false 
     t.string :address 
     t.integer :age 
     t.string :gender 
     t.string :name 
     t.integer :profile_id 
     t.string :profile_type 

     ## Recoverable 
     t.string :reset_password_token 
     t.datetime :reset_password_sent_at 

     ## Rememberable 
     t.datetime :remember_created_at 

     ## Trackable 
     t.integer :sign_in_count, :default => 0, :null => false 
     t.datetime :current_sign_in_at 
     t.datetime :last_sign_in_at 
     t.string :current_sign_in_ip 
     t.string :last_sign_in_ip 
     t.timestamps 
    end 

    add_index :users, :email,    :unique => true 
    add_index :users, :reset_password_token, :unique => true 
    end 
end 

Wächter Migration

class CreateGuardians < ActiveRecord::Migration 
    def change 
    create_table :guardians do |t| 
     t.string :family_name 

     t.timestamps 
    end 
    end 
end 

Ich möchte eine Daten aus Benutzertabelle und Hüterin Tisch bekommen einzelne Variable Guardian hat einen Benutzer und verwenden r gehört zum Vormund als Profil (polymorph). Ich möchte Daten von Benutzertabelle erhalten und von Wächter Tisch, wo guardian_id = users.profile_id

+0

dies ist meine erste Frage tut mir leid für die Einrückung. –

+0

Vermeiden Sie das Hinzufügen von kommentiertem Code, es fügt nur Rauschen hinzu. –

Antwort

14

Versuchen

Guardian.select("*").joins(:user) 

Edit:

wenn Sie Spalten mit dem gleichen Namen von der Join Sie können

Guardian.select("guardians.family_name, guardians.id as g_id, users.id as u_id, 
    users.name, users.email, users.username, users.address, users.age, 
    users.gender").joins(:user).where(:users => {:u_id => @user_session.id}) 
+0

ja das hat funktioniert. aber wenn ich einige der Attribute von Benutzer und Wächter will. (nur family_name von Wächter und Identifikation, Name vom Benutzer)? –

+0

Überprüfen Sie http://StackOverflow.com/a/15824511/643500 –

+0

Guardian.select ("Wächter. *, Users.id als Benutzer_ID"). Joins (: Benutzer). Having ("Benutzer_ID = (wählen Sie die ID von Benutzern aus, wo id = guardians.id Sortierung nach ID desc limit 1) ") Dies liefert ein Null-Objekt. was ist der Fehler :( –

0

Aus irgendeinem Grund oben Antwort funktionierte nicht für mich, also ich versuchte direkte sql Abfrage

sqlQuery = "select tableA.column1, tableB.column2 from tableA inner join tableB on tableA.some_id = tableB.id" 
ActiveRecord::Base.connection.execute(sqlQuery) 
Verwandte Themen