我目前正在使用具有本地API的rails应用程序,我通过ajax请求从我的主模型Book.rb请求搜索功能的数据。
我希望能够在Book.rb SQL查询中包含Category.rb属性。
db结构就像这样。
class Book < ActiveRecord::Base
has_many :book_category_relations
has_many :categories, through: :book_category_relations
end
class BookCategoryRelation < ActiveRecord::Base
belongs_to :book
belongs_to :category
end
class Category < ActiveRecord::Base
has_many :books, through: :book_category_relations
has_many :book_category_relations
end
这是我在book.rb上查询的问题。
Book.rb
scope :search, -> query { where("lower(title) LIKE ? OR lower(author) LIKE ? OR lower(publisher) LIKE ? OR lower(publication_year) LIKE ? OR lower(country_of_origin) LIKE ? OR lower(description) LIKE ? OR lower(category) LIKE ?",
"%#{query}%".downcase, "%#{query}%".downcase, "%#{query}%".downcase, "%#{query}%".downcase, "%#{query}%".downcase, "%#{query}%".downcase, "%#{query}%".downcase) }
end
这就是我的.json.jbuilder的样子。
app/views/api/books/index.json.jbuilder
json.array! @books do |book|
json.title book.title
json.author book.author
json.publisher book.publisher
json.image_url book.cover.url
json.id book.id
json.publication_year book.publication_year
json.country_of_origin book.country_of_origin
json.description book.description
json.price book.price
if book.categories[0] != nil
json.category book.categories[0].name
end
end
我希望能够将Book.categories.name
纳入我在图书模型中定义的范围,以便我可以按照与我的图书模型相关的类别进行搜索。
我试过了: 低(book.categories) 2. lower(book.category.name)
这是api通过http://localhost:3000/api/books/?utf8=%E2%9C%93&search=diccionario
[
{
title: "DICCIONARIO DEL ESPAÑOL JURIDICO",
author: "Santiago Muñoz Machado",
publisher: "Consejo General del Poder Judicial",
image_url: "/system/books/covers/000/",
id: 30,
publication_year: "2016",
country_of_origin: "España",
description: null,
price: "175.0",
category: [
{
name: "Diccionarios"
}
]
}
]
赞赏任何提示,提示或参考!
答案 0 :(得分:0)
install.packages("data.table")
library(data.table)
datadt <- as.data.table(data)
datadt[,sentence.count:=sum(nchar(label))+.N-1,by=SentenceID]
所以,我错过了一个&#39;加入(:类别)&#39;在我之前。
当我们在模型中定义一个像has_many或:belongs_to这样的关系时,rails活动记录会自动执行此操作,但是由于我的sql查询响应了javascript函数而不是rails方法,因此必须在我的作用域上声明它。