【问题标题】:Controller design for likable/followable objects可爱/可跟随对象的控制器设计
【发布时间】:2011-11-15 13:44:05
【问题描述】:

我有三个模型,用户、产品、赞。也就是说,用户可以(不)喜欢一个产品......

我想知道设计控制器和模型的最佳实践是什么。

  1. 创建 likes_controller 并处理创建/销毁操作
  2. 在 products_controller 中创建类似/不类似的操作
  3. 或其他。

第二个问题;我应该将“retrieve_likes”、“liked?”或“like!/unlike!”等方法放入哪个模型中

编辑:我通过 TeachMeToCode.com 找到了这个优秀的宝石,https://github.com/cavneb/make_flaggable

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3


    【解决方案1】:

    我之前已经完成了选项 1 和 2,并且它们都运行良好。这实际上取决于您的理念以及您喝了多少 REST kool-aid。选择 #1 来实现 RESTful。我发现坚持使用更 RESTful 的界面会使测试看起来更干净,而且代码通常看起来更干净。然而,以拥有更多文件为代价。

    对于模型,您可以创建一个 Likable 模块,其中包含“喜欢?”等方法...然后您可以将此模块包含在任何需要它们的模型中。查看一些扩展 ActiveRecord 模型的 gem,了解如何做到这一点。

    【讨论】:

    • 好吧,我成功地完成了第二个选项,即使使用 ajax 也能很好地工作。我添加了喜欢和不喜欢的成员路线。然而,当我尝试将其转换为第一个选项时,我遇到了路线问题。我将它嵌套到路线内的产品中。如何让它表现得像成员对象,例如 products/:id/(un)like 而不是 products/:id/likes。
    【解决方案2】:

    你可以有 3 张桌子:

    users: user_id, name, like_id
    products: product_id, info, like_id
    likes: like_id, user_id, product_id
    

    在您的User 模型中:

    has_many :likes
    

    在您的Product 模型中:

    has_many :likes
    

    在您的Like 模型中:

    belongs_to product
    belongs_to user
    

    这将允许您执行诸如致电<%= @product.likes.count %> 以计算某件事被点赞的次数之类的操作。

    或者在用户控制器中:@liked_products = User.likes.map(&:product)

    要创建填充likes 表的链接,您需要使用add_likeremove_like 方法创建一个likes 控制器。

    您可能还需要了解一些称为“嵌套路由”的知识才能使其正常工作。

    【讨论】:

    • 好吧,好吧,好吧。虽然我的问题主要是关于控制器设计,但我感谢您为帮助我进行模型设计所做的努力。但是,我不完全理解为什么需要为用户和产品创建 like_id 字段。 (也许是为了按用户映射喜欢的产品?)。顺便说一句,我想我需要检查 user 模型中是否 current_user.has_liked?(product) 。发送。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多