【问题标题】:join in rails 4 with scope使用范围加入 Rails 4
【发布时间】:2015-05-14 12:41:15
【问题描述】:

我的 rails 4 应用程序中有博客和类别模型。这两个模型之间存在多对多的关系。我有多个复选框。我想获取属于该类别的所有博客。我的博客模型中有这个

scope :by_categories, lambda{|category_ids| joins(:blog_categories).where("blog_categories.category_id in (?)", category_ids) if category_ids.present?}

这在我的控制器中

def search_blogs
 @blogs = Blog.by_categories(params[:category_ids])       
end

但每当我选择多个类别(如 category_ids => [1,2,3] )时,我只会获取 category_id 1 而不是 2 和 3 的博客

【问题讨论】:

  • 你能从请求发生的地方发布日志吗?基本上,我希望看到生成的 SQL。
  • SELECT blogs.* FROM blogs INNER JOIN blog_categories ON blog_categories.blog_id = blogs.id WHERE (blog_categories.category_id in ('1, ')) 按已发布的 DESC 排序
  • 现在我想获取属于 category_id 1 和 3 的所有博客,但我得到的是 id 1 而不是 3 的结果
  • @kali 这里的问题是你的 params[:category_ids] 是一个字符串。使它们成为 id 数组以获得所需的输出
  • ('1,3')。这是字符串预期 (1,3)

标签: ruby-on-rails activerecord


【解决方案1】:

因为,您正在获得按类别划分的博客。所以使用以下代码:

scope :by_categories, lambda{|category_ids| joins(:blog_categories).where("blogs.category_id in (?)", category_ids) if category_ids.present?}

【讨论】:

    猜你喜欢
    • 2017-01-15
    • 2016-07-11
    • 2013-09-26
    • 1970-01-01
    • 2016-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    相关资源
    最近更新 更多