【问题标题】:Ruby on Rails - How to Query on model/condition on controller?Ruby on Rails - 如何在控制器上查询模型/条件?
【发布时间】:2012-05-24 12:23:18
【问题描述】:

我正在使用 rails 3.2.3 并且对查询有疑问。

我读到使用 arel 而不是命名范围是有利的。

基本上在我的应用中,当用户登录时,我希望他看到他创建的产品。 所以不要在我的控制器索引中:

products=Product.find(:all)

我正在寻找类似的东西

products=Product.find(:all, :conditions....)

问题是,我的 User 和 Product 模型有一个 HABTM 关系(它确实必须是),我不知道如何加入这些表,以便只显示 current_user 插入的产品(插入工作正常)

我必须在我的产品模型中添加搜索方法吗? 或者这可以通过在索引控制器中传递:conditions 来完成?

基本上逻辑是:

->获取所有产品

->与 products_users HABTM 表内联,得到 products_users.user_id = current_user.id 的所有产品。返回结果。

我不知道我是否在这里遗漏了什么......关于如何编码的任何提示?我有点困惑。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 arel named-scope


    【解决方案1】:
    if user_sighed_in?
      @products = current_user.products
    else
      @products = Product.scoped
    end
    

    你必须在用户模型中定义关联

    has_many :products 
    

    【讨论】:

    • 最好不要在控制器中使用.all。您可以改为返回关系:Product.scoped。这里的原因是为将来可能使用片段缓存的情况做好准备——尽管您从缓存中获取页面内容,但仍然会触发昂贵的 DB 查询,您不会很高兴。
    • 大声笑,ofc 这只是他的代码的对话......至少他需要范围或分页结果(无论如何我投票赞成你的好评论)
    【解决方案2】:

    如果您有关联的用户和产品模型 - 此代码 @products = current_user.products 将返回 current_user 的产品。

    【讨论】:

      【解决方案3】:

      要找到当前用户的所有产品,这就可以了

         current_user.products 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-26
        • 2023-03-07
        • 2019-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多