私はコーディングの初心者で、RoR を発見しています。ユーザーと製品を使用してアプリケーションを作成したいと考えています。ユーザーのことはいいのですが、製品のアーキテクチャについて疑問に思っています...
ここで私が想像する製品モデル:
Product :
- Name
- Owner
- Borrower
- Location
- Address
- GPS Coordinates
- Comments
- Title
- Content
- User
- Category
そして、ここに私の主なモデルがあります:
Class User
has_many :owned_products, class_name: "Product", foreign_key: "owner_id"
has_many :borrowed_products, class_name: "Product", foreign_key: "borrower_id"
has_one :location, as: :localizable
end
$ rails generate model Location address:string coordinates:string
Class Location
belongs_to :localizable, polymorphic: true
end
$ rails generate model Comment title:string content:text user_id:integer
Class Comments
belongs_to :product
has_one :user
end
$ rails generate model Product name:string owner_id:integer borrower_id:integer location_id:integer comment_id:integer category_id:integer
Class Product
belongs_to :owner, class_name: "User", foreign_key: "owner_id"
belongs_to :borrower, class_name: "User", foreign_key: "borrower_id"
has_one :location, as: :localizable
has_many :comments
has_one :category
end
したがって、次のようなすべてのカテゴリ サブモデルを作成する必要があるかどうか疑問に思っています。
- Consumption
- Name
- Utility
- Builder
- Culture
- Title
- Barcode
- Type
- Book
- Author
- Publisher
- Video
- Length
- Format
- Food
- Name
- Cooking Date
- Weight
私は次のように書き留めます:
$ rails generate model Category consumption_id:integer culture_id:integer food_id:integer
Class Category
belongs_to :product
has_one :consumption
has_one :culture
has_one :food
end
$ rails generate model Consumption name:string utility:string builder:string
Class Consumption
belongs_to :category
end
$ rails generate model Culture title:string barcode:integer type_id:integer
Class Culture
belongs_to :category
has_one :type
end
$ rails generate model Type book_id:integer video_id:integer
Class Type
belongs_to :culture
has_one :book
has_one :video
end
$ rails generate model Book author:string publisher:string
Class Book
belongs_to :type
end
$ rails generate model Video length:string format:string
Class Video
belongs_to :type
end
$ rails generate model Food name:string cooking_date:datetime weight:float
Class Food
belongs_to :category
end
または、次のように 1 つのレベルだけにしておく方がよい場合:
- Category_type (consumption, culture, or food)
- Name (or title)
- Utility
- Builder
- Barcode
- Culture_type
- Author
- Publisher
- Length
- Format
- Cooking_date
- Weight
それは私に与えるでしょう:
$ rails generate model Category category_type:string name:string utility:string builder:string barcode:integer culture_type:string author:string publisher:string length:integer format:string cooking_date:datetime weight:float
Class Category
belongs_to :product
end
最初の方法の方が理解しやすいと思いますが、2 番目の方法ほど効率的ではないと思います。ヒントを教えてください。
@ r4mに従って、これが私がしたことです:
$ rails generate model Category
Class Category
belongs_to :product
belongs_to :categorizable, polymorphic: true
end
$ rails generate model Consumption name:string utility:string builder:string
Class Consumption
has_many :categories, :as => :categorizable
end
$ rails generate model Culture title:string barcode:integer type_id:integer
Class Culture
has_many :categories, :as => :categorizable
has_one :type
end
$ rails generate model Food name:string cooking_date:datetime weight:float
Class Food
has_many :categories, :as => :categorizable
end
そして、カテゴリの移行を次のように変更しました。
class CreateCategories < ActiveRecord::Migration
def change
create_table :categories do |t|
t.references :categorizable, polymorphic: true
t.timestamps
end
end
end
でも、どうも私には理解できそうにありません…。
@user のすべての「消費」製品を取得したい場合、どうすればよいですか? そのようなことはうまくいくでしょうか?
@consumptions = @user.products.consumptions