Rails:模型之间的关联

时间:2015-12-17 08:01:26

标签: ruby-on-rails

我对Rails很陌生,所以对我来说并非一切都很清楚。我有以下型号。

class Order < ActiveRecord::Base
   has_many :sales
   belongs_to :user
end
class Sale < ActiveRecord::Base
   has_many :brands
   belongs_to :warehouse
   belongs_to :user
   belongs_to :order
end

我想要做的是连接这两个模型,因此每个Sale都有一个父Order_ID。你会如何在你的控制器中做到这一点?我很困惑。谢谢你们!

1 个答案:

答案 0 :(得分:3)

您应该查找如何创建has_many/belongs_to关联:

enter image description here

要获得所需内容,请使用以下内容:

#app/models/order.rb
class Order < ActiveRecord::Base
   has_many :sales
end

#app/models/sale.rb
class Sale < ActiveRecord::Base
   belongs_to :order
end

您需要设置foreign_key模型的Sale,以便每次调用@sale对象时,它都会与@order关联:

$ rails g migration AddForeignKeyToSales

#db/migrate/add_foreign_key_to_sales________.rb
class AddForeignKeyToSales < ActiveRecord::Migration
   def change
       change_table :sales do |t|
         t.references :order, after: :id
       end
   end
end 

$ rake db:migrate

这会将销售表设置为包含order_id外键,然后您可以使用以下控制器设置:

#config/routes.rb
resources :orders do
   resources :sales #-> url.com/orders/:order_id/sales/new
end

#app/controllers/sales_controller.rb
class SalesController < ApplicationController
   def new
      @order = Order.find params[:order_id]
      @sale = @order.sales.new
   end

   def create
      @order = Order.find params[:order_id]
      @sale = @order.sales.new order_params
      @sale.save
   end
end