1

我是 Rails 新手,但我的应用程序有一个大问题。

业务逻辑 - 用户可以收藏餐厅、菜单、项目。我们有 :

class Restaurant < ActiveRecord::Base
     has_many :items, :dependent=>:destroy
     has_many :menus, :dependent=> :destroy
     belongs_to :owner, :class_name => 'User'
end
class Menu < ActiveRecord::Base
     belongs_to :restaurant
     has_many :items,:dependent=>:destroy
end
class Item < ActiveRecord::Base
     belongs_to :restaurant
     belongs_to :menu
end
class User < ActiveRecord::Base
     has_many :restaurants
end

有人可以帮我解决我的问题吗?

谢谢你的支持

p/s:对不起我的英语,我是越南人。

4

1 回答 1

3

您需要在 aUserFavoritableitem 之间建立多态关联。这是使用polymorphic下面的关联完成的:

class Restaurant < ActiveRecord::Base
  belongs_to :favoritable, polymorphic: true
end

class Menu < ActiveRecord::Base
  belongs_to :favoritable, polymorphic: true
end

class Item < ActiveRecord::Base
  belongs_to :favoritable, polymorphic: true
end

class User < ActiveRecord::Base
  has_many :favorites, as: :favoritable
end

然后您可以使用以下内容检索用户的收藏夹:

user = User.first
user.favorites
# => [...]

您可以使用以下方法构建新的收藏夹:

user.favorites.build(favorite_params)

或者您可以直接使用以下方法分配一个喜欢的对象:

user.favorites << Restaurant.find(1)
user.favorites << Menu.find(1)
user.favorites << Item.find(1)

有关多态关联的更多信息。

于 2013-10-22T13:09:03.703 回答