Я использую Rails 3 Beta и предполагаю, что синтаксис похож на 2.x. Я также не очень знаком с Ruby и Rails.
В Django несколько внешних ключей для одной модели выглядят следующим образом:
class Dish(models.Model):
name = models.CharField(max_length=100)
lunch = models.ForeignKey(Ingredient, related_name='lunch')
dinner = models.ForeignKey(Ingredient, related_name='dinner')
class Ingredient(models.Model):
spices = models.IntegerField()
veggies = models.IntegerField()
В Rails я думаю сделать что-то вроде следующего:
# Migration file
create_table :dishes do |t|
t.column :name, :string
end
create_table :ingredients do |t|
t.column :spice, :integer
t.column :veggies, :integer
t.column: :dish_id, :integer
t.column: :meal, :string # lunch or dinner
end
# Models
class Dish < ActiveRecord::Base
def lunch
return # ingredient for the current dish where type == lunch
end
def dinner
return # ingredient for the current dish where type == dinner
end
end
Вышеуказанная правильная идея или есть лучший способ сделать это?
Больше разъяснений:
В ресторане подают одно и то же блюдо во время обеда и ужина, но используют разные количества ингредиентов между этими двумя приемами пищи. Каждое блюдо может содержать не более одного объекта ингредиента обеда и не более одного объекта ингредиента обеда.