【问题标题】:Rails Console Complex queriesRails 控制台复杂查询
【发布时间】:2016-03-04 22:47:42
【问题描述】:

我想使用这样的后续查询发布子类别:

Gender.where(gender: 'Masc').categories.where(name: 'clothes').subcategories.create([{ name: 't-shirt' }])

但显示此错误!

rake 中止! NoMethodError:未定义的方法“子类别” 类别

我进行了搜索,但找不到如何使用链式查询创建数据。

Gender Model:

class Gender < ActiveRecord::Base
  extend FriendlyId
  friendly_id :gender, use: [:slugged, :history]

  has_many :categories
  has_many :subcategories, through: :categories
  has_many :products
  accepts_nested_attributes_for :categories
  accepts_nested_attributes_for :products
  accepts_nested_attributes_for :subcategories
  attr_accessible :gender, :categories_attributes, :subcategories_attributes,


end

【问题讨论】:

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


    【解决方案1】:

    where(name: 'clothes') 返回一个查询,而不是模型实例。大概您的类别中有一个has_many :subcategories,并且类别名称是唯一的,因此您可以使用find_by 来查找衣服类别,然后调用subcategories。同样查找性别:

    Gender.find_by(gender: 'Masc')  # This gives you a single Gender instance
          .categories
          .find_by(name: 'clothes') # and then a single Category here
          .subcategories
          .create(name: 't-shirt')
    

    【讨论】:

    • 非常感谢@mu_is_too_short,但我不知道为什么仍然显示:NoMethodError: Gender Load (0.5ms) SELECT "genders".* FROM "genders" WHERE "genders"."gender " = 'Masc' 未定义方法 `categories' 用于#<:friendlyidactiverecordrelation:0x007f261c2890d0>
    • 你的Gender 模型是什么样的?
    • 所以你说Gender.find_by(gender: 'Misc') 和FriendlyId 给你一个关系?真的吗?这对我来说没有任何意义,而且我从未听说过 FriendlyId,所以我不知道它在做什么。你确定你不是在说Gender.where(gender: 'Misc') 吗?
    • 好吧,我也不知道为什么 FriendlyId 会这样!我更改为 find_by 并发生同样的情况。我要在子类别中添加一个gender_id 来检查这个问题是否是关联问题。
    猜你喜欢
    • 2022-11-29
    • 2011-06-07
    • 2013-05-22
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-07
    • 1970-01-01
    相关资源
    最近更新 更多