Ruby on rails 通过Rails 4中的“属于”关系查询记录
我希望对通过Rails 4中的“属于”关系查询记录的正确方法有一点澄清 我想找到所有具有特定类别名称的零件 我可以使用:Ruby on rails 通过Rails 4中的“属于”关系查询记录,ruby-on-rails,ruby-on-rails-4,Ruby On Rails,Ruby On Rails 4,我希望对通过Rails 4中的“属于”关系查询记录的正确方法有一点澄清 我想找到所有具有特定类别名称的零件 我可以使用:Part.where(category\u ID:“1”) 但我不能把它和名字联系起来 如果我这样做: Part.joins(:categories).where("categories.name = 'cars'").first 我得到了这个错误: ActiveRecord::ConfigurationError:在部件上找不到名为“categories”的关联;也许你拼错
Part.where(category\u ID:“1”)
但我不能把它和名字联系起来
如果我这样做:
Part.joins(:categories).where("categories.name = 'cars'").first
我得到了这个错误:
ActiveRecord::ConfigurationError:在部件上找不到名为“categories”的关联;也许你拼错了
我不知道我在哪里拼错了什么,也不知道为什么它不起作用。任何帮助都将不胜感激
类别模型:
class Category < ActiveRecord::Base
has_many :parts
end
零件表:
CREATE TABLE parts
(
id serial NOT NULL,
category_id integer,
CONSTRAINT parts_pkey PRIMARY KEY (id)
)
使用:Part.join(:category)
传递给joins
的关联名称应该与您的声明相似:属于:category
。这里您使用的是:category
,所以给连接
相同的符号。使用:部分。连接(:category)
传递给
joins
的关联名称应该与您的声明相似:属于:category
。这里您使用了:category
,因此给联接
相同的符号。您的所属的关联名称在部分
模型中是单数的(这是正确的,因为它是标准的),但是您尝试使用复数的关联名称(您尝试了:categories
)。常见的错误;您可能混淆了数据库命名约定和rails关联命名约定。请尝试以下方法:
Part.joins(:category).where('categories.name = "cars"').first
旁注:
这与问题无关,但如果您还不知道,也可以在where子句中使用哈希。它看起来像:
where(categories: {name: "cars"})
结果是一样的。在您的情况下,它是不相关的,因为您显然传递了一个文本字符串,但当您使用表单数据或其他同样不安全的数据时,它可能会派上用场,因为哈希方法会正确地将参数视为文本,而不是危险地将其按原样放入查询。您的所属的关联名称在部分模型中是单数的(这是正确的,因为它是标准的),但您尝试使用复数关联名称加入(您尝试了:categories
)。常见的错误;您可能混淆了数据库命名约定和rails关联命名约定。请尝试以下方法:
Part.joins(:category).where('categories.name = "cars"').first
旁注:
这与问题无关,但如果您还不知道,也可以在where子句中使用哈希。它看起来像:
where(categories: {name: "cars"})
结果是一样的。在您的情况下,这是不相关的,因为您显然是在传递一个文本字符串,但当您使用表单数据或其他同样不安全的数据时,它可能会派上用场,因为哈希方法会正确地将参数视为文本,而不是危险地将其按原样放在查询中。我正在尝试让它立即工作-Part.where(categories:{name:“cars”})但我一直在回复:::Part Load(0.5ms)选择“parts”。*从“parts”中选择“categories”。“name”=“cars”PG::未定义:错误:从表“categories”的子句条目中丢失:::有什么想法可能导致错误吗?@newusername这里您仍然需要连接(:categority)
part。否则将不会执行内部联接
,SQL将不知道categories
引用的含义。我现在正在尝试让它工作-part.where(categories:{name:“cars”}),但我一直返回:::零件加载(0.5ms)选择“parts”。*从“parts”中选择“categories”。“name”='cars'PG::UndefinedTable:ERROR:从表“categories”的子句条目中丢失:::知道什么可能导致该错误吗?@newusername这里您仍然需要连接(:category)
部分。否则内部连接将不会执行,SQL将不知道类别
引用的含义。