私は最近、RoRの学習を始めました。私は趣味のプロジェクトを作成しています。私のActiveRecordの関係のレビューを探しています
簡単な背景:各顧客はアカウント番号で識別されます。各商品の販売にはアカウント番号があり、商品表にはすべての特定の商品データが含まれています。
私の質問は - 私が今持っているフォーマットでは、これは私がこれらのテーブルをリンクするべき正しい方法ですか?私が抱えている問題の1つは、製品のメジャーに基づいて販売のグループをフィルタリングすることです。だから私は顧客がいて、メジャーが「商業」であるところで製品販売を見たいと思っていますが、このデータをフィルタリングするにはどうすればいいですか?作成した範囲を参照してください - しかし、私はそれを使用する方法がわかりません。
class Product < ActiveRecord::Base
has_many :product_sales, :primary_key => :prodnum, :foreign_key => :prodnum
has_many :customers, through: :sales
scope :commercial_products, -> { where(major: 'Commercial') }
end
class ProductSale < ActiveRecord::Base
belongs_to :customer, :foreign_key => :account
belongs_to :product, :foreign_key => :prodnum, :primary_key => :prodnum
end
class Customer < ActiveRecord::Base
has_many :product_sales, :primary_key => :account, :foreign_key => :account
has_many :products, through: :product_sales
end
と私のスキーマ
create_table "customers", force: :cascade do |t|
t.integer "account"
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "product_sales", force: :cascade do |t|
t.integer "account"
t.string "month"
t.string "prodnum"
t.integer "sales"
t.integer "qtyshipped"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "products", force: :cascade do |t|
t.string "pcatcode"
t.string "pcatname"
t.string "major"
t.string "prodline"
t.string "brand"
t.string "tier"
t.string "prodnum"
t.string "proddesc"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
あなたは、私がお勧め専攻のAA有限集合を持っている場合は、(Active Recordの列挙型を見てみましょうhttp://api.rubyonrails.org/v4.1/classes/ActiveRecord /Enum.html)、これにより、文字列(よりパフォーマンスの高い)ではなくDBに整数を格納できるようになり、 'products.commercial'のような便利なメソッドにアクセスできます。 – Leito