2010-05-10 2 views
2

Я создаю сайт в Ruby on Rails, у меня есть две модели модели User и модель Transaction.Ruby on Rails - основной и внешний ключ

Эти модели оба принадлежат к счету, так что они оба имеют поле, называемое account_id

Я пытаюсь настроить связь между ними следующим образом:

class User < ActiveRecord::Base 
    belongs_to :account 
    has_many :transactions 
end 

class Transaction < ActiveRecord::Base 
    belongs_to :account 
    belongs_to :user 
end 

Я использую эти ассоциации следующим образом:

user = User.find(1) 
transactions = user.transactions 

на данный момент приложение пытается найти сделки с user_id, вот SQL он генерирует:

Mysql::Error: Unknown column 'transactions.user_id' in 'where clause': SELECT * FROM `transactions` WHERE (`transactions`.user_id = 1) 

Это неверно, так как я хотел бы, чтобы найти сделок через account_id, я попытался установить ассоциации, как так:

class User < ActiveRecord::Base 
    belongs_to :account 
    has_many :transactions, :primary_key => :account_id, :class_name => "Transaction" 
end 

class Transaction < ActiveRecord::Base 
    belongs_to :account 
    belongs_to :user, :foreign_key => :account_id, :class_name => "User" 
end 

Это почти достигает того, что я ищу, чтобы сделать и генерирует следующий SQL:

Mysql::Error: Unknown column 'transactions.user_id' in 'where clause': SELECT * FROM `transactions` WHERE (`transactions`.user_id = 104) 

число 104 является правильным account_id, но он по-прежнему пытается запросить таблицу транзакций для user_id поле. Может кто-нибудь дать мне несколько советов о том, как я могу настроить ассоциации запросить таблицу транзакций для account_id вместо user_id в результате запроса SQL, как так:

SELECT * FROM `transactions` WHERE (`transactions`.account_id = 104) 

Приветствий

Eef

ответ

0

Если вы не имеете columnt user_id в transactions та BLE, то вы должны использовать Account модель, чтобы выбрать все операции:

class User < ActiveRecord::Base 
    belongs_to :account 
end 

class Account < ActiveRecord::Base 
    has_many :transactions 
    has_one :user # or has_many :users 
end 

class Transaction < ActiveRecord::Base 
    belongs_to :account 
end 

User.find(1).account.transactions 

Обратите внимание, что вы должны удалить has_many :transactions из User и belongs_to :user из Transaction, как они предполагают, что у вас есть user_id колонки.

-1

Я хочу, чтобы хранить данные в адресной модели, ассоциации с моделью обучаемого

class AddressesController < ApplicationController 

    def new 
     @address = Address.new  
    end 

    def create 
     @address = Address.create(:address_date => Time.now, 
      :student_id => @student.id) 
    end 

    private 

    def address_params 
     params.require(:address).permit(:gali_no, :house_no_flate_no, :vill_town_city, :district, :state, :post_code, :country) 
    end 
end 






class StudentsController < ApplicationController 

    def show 

    end 

    def new 
     @student = Student.new 
    end 

    def create 
     @student = Student.new(student_params) 

     if @student.save 
      redirect_to root_url, :notice => "You have been registered" 
     else 
      render "new" 
     end 
    end 

    private 
    def student_params 
     params.require(:student).permit(:f_name, :l_name, :email, :password, :password_confirmation, :mobile_no) 
    end 
end 


class Student < ActiveRecord::Base 

    has_many :addressess, :dependent => :destroy 

    attr_accessor :password 

    before_save :encrypt_password 

    validates_confirmation_of :password 
    validates_presence_of :f_name 
    validates_presence_of :l_name 
    validates_presence_of :password, :on => :create 
    validates_presence_of :email 
    validates_uniqueness_of :email 

    def encrypt_password 
     if password.present? 
      self.password_salt = BCrypt::Engine.generate_salt 
      self.password_hash = BCrypt::Engine.hash_secret(password, password_salt) 
     end 
    end 
end 




class Address < ActiveRecord::Base 

    belongs_to :student 

end 
+0

Вы должны построить ответ правильно с правильной подсветкой синтаксиса и отступами. – RatDon

Смежные вопросы