我正在建立一个应用程序,用户有一些愿望清单
用户只能有一个愿望清单,并且可以将现有项目添加到该愿望清单,但这些项目属于该站点上的其他用户
我需要能够通过current_user.wishlist.items访问wishlist项目(即时使用Devise,因此current_user可用)
我虽然在items表中添加了wishlist_id列,但由于项目可以属于多个愿望清单,因此无效.
这看起来很简单,但我很难想象关系或我应该生成的迁移
class User < ActiveRecord::Base
has_one :wishlist # or belongs_to :wishlist, it depends which you prefer
end
class Wishlist < ActiveRecord::Base
belongs_to :user
has_and_belongs_to_many :items
end
Run Code Online (Sandbox Code Playgroud)
而且当然:
./script/rails generate migration create_item_wishlists wishlist_id:integer item_id:integer
Run Code Online (Sandbox Code Playgroud)
在项目和愿望清单之间创建连接表.
更新:在评论中回答"坦率的暴风雪"问题:
假设您的结构与我的答案相同(只需将项目更改为产品或其他型号名称),使用HABTM关系您只需要将新"项目"添加到"项目"的集合中,然后保存心愿单:
@user.wishlist.items << item
@user.wishlist.save
Run Code Online (Sandbox Code Playgroud)
你可以在用户中使用它:
class User
def add_to_wishlist(item)
wishlist.items << item
end
end
Run Code Online (Sandbox Code Playgroud)
如果要删除或修改"items"的集合,只需使用Array中的任何Ruby方法,然后保存wishlist,它将为您检查差异并仅保存更改.
| 归档时间: |
|
| 查看次数: |
1684 次 |
| 最近记录: |