- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Node
类,我在上面设置了 acts_as_taggable
,所以我可以将 user_tags
添加到任何节点。我的 Node
模型也有一个方法,可以查找 user_tag_list
中所有用户的实际 User
记录。这是一个例子:
[32] pry(main)> m = Node.find(85)
Node Load (8.6ms) SELECT "nodes".* FROM "nodes" WHERE "nodes"."id" = $1 LIMIT 1 [["id", 85]]
=> #<Node id: 85, name: "House Fire 2", family_tree_id: 57, user_id: 57, media_id: 228, media_type: "Video", created_at: "2015-05-15 00:20:26", updated_at: "2015-05-20 01:06:34">
[33] pry(main)> m.user_tags
ActsAsTaggableOn::Tag Load (3.8ms) SELECT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."taggable_id" = $1 AND "taggings"."taggable_type" = $2 AND "taggings"."context" = 'user_tags' [["taggable_id", 85], ["taggable_type", "Node"]]
=> [#<ActsAsTaggableOn::Tag id: 4, name: "gerry@test.com", taggings_count: 1>, #<ActsAsTaggableOn::Tag id: 6, name: "danny@test.com", taggings_count: 1>]
[34] pry(main)> m.user_tag_list
ActsAsTaggableOn::Tag Load (0.8ms) SELECT "tags".* FROM "tags" INNER JOIN "taggings" ON "tags"."id" = "taggings"."tag_id" WHERE "taggings"."taggable_id" = $1 AND "taggings"."taggable_type" = $2 AND (taggings.context = 'user_tags' AND taggings.tagger_id IS NULL) [["taggable_id", 85], ["taggable_type", "Node"]]
=> ["gerry@test.com", "danny@test.com"]
[35] pry(main)> m.tagged_users
User Load (5.7ms) SELECT "users".* FROM "users" WHERE "users"."email" = 'gerry@test.com' LIMIT 1
User Load (2.1ms) SELECT "users".* FROM "users" WHERE "users"."email" = 'danny@test.com' LIMIT 1
=> [#<User id: 52, email: "gerry@test.com", encrypted_password: "$2a$10$KaX1kvtIw1.jGITnt9Czqeq3xTzhY3OM052NSHsL5Lf...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 5, current_sign_in_at: "2015-04-03 17:10:28", last_sign_in_at: "2015-04-03 00:38:24", current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1", created_at: "2015-03-05 01:36:31", updated_at: "2015-04-03 17:10:28", first_name: "Gerry ", confirmation_token: nil, confirmed_at: "2015-03-05 01:36:52", confirmation_sent_at: nil, unconfirmed_email: nil, invitation_relation: "uncle", avatar: nil, invitation_token: nil, invitation_created_at: "2015-03-05 01:36:31", invitation_sent_at: "2015-03-05 01:36:31", invitation_accepted_at: "2015-03-05 01:36:52", invitation_limit: nil, invited_by_id: 1, invited_by_type: "User", invitations_count: 0, bio: nil, last_name: "Atrick", gender: 0>,
#<User id: 58, email: "danny@test.com", encrypted_password: "$2a$10$ZpzLH17iFrOXzH4U/pOX.e4nwN.9IJ1s1Ap/zQglk9K...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 6, current_sign_in_at: "2015-05-26 04:36:32", last_sign_in_at: "2015-04-03 00:14:55", current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1", created_at: "2015-03-12 03:39:28", updated_at: "2015-05-26 04:36:32", first_name: "Daniel", confirmation_token: nil, confirmed_at: "2015-03-12 05:46:18", confirmation_sent_at: nil, unconfirmed_email: nil, invitation_relation: "son", avatar: nil, invitation_token: nil, invitation_created_at: "2015-03-12 03:39:28", invitation_sent_at: "2015-03-12 03:39:28", invitation_accepted_at: "2015-03-12 05:46:18", invitation_limit: nil, invited_by_id: 57, invited_by_type: "User", invitations_count: 0, bio: nil, last_name: "Marty", gender: 0>]
因此,理想情况下,我想要做的是允许用户搜索 say Gerry
,它会从上面的示例中返回 Node.id = 85
,因为Node.id = 85
有一个名字为 Gerry
的用户标签。
这是我在 Node
上现有的 pg_search
:
pg_search_scope :node_search, against: [:name, :user_id, :circa],
using: { tsearch: { any_word: true} },
:associated_against => {
comments: [:message],
user: [:first_name, :last_name, :email],
memberships: [:relation]
}
我觉得我应该可以使用 pg_search 的动态范围,但我不太理解它。
我将如何实现这一点?
最佳答案
事实证明,答案非常简单。
假设这是我的 Node
模型中 acts-as-taggable-on
的声明:
acts_as_taggable_on :user_tags
解决方案就是在 pg_search
声明中添加这一列,如下所示:
include PgSearch
pg_search_scope :node_search, against: [:name, :user_id, :circa],
using: { tsearch: { any_word: true, dictionary: :english} },
:associated_against => {
comments: [:message],
user: [:first_name, :last_name, :email],
memberships: [:relation],
user_tags: [:name]
}
请注意,我必须在 user_tags
中指定字段(即 :name
属性)。
现在,它像我想要的那样搜索 :user_tags
的虚拟属性。
关于ruby-on-rails - 如何使用 pg_search 搜索对象的虚拟属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30472295/
在我的应用程序中,我有许多模型,我想向其中添加多重搜索,我觉得我已经完成了所需的一切,但是在控制台中,当我运行以下命令时,我得到一个空的 []。 PgSearch.multisearch("Red")
在我的应用程序中,我有许多模型,我想向其中添加多重搜索,我觉得我已经完成了所需的一切,但是在控制台中,当我运行以下命令时,我得到一个空的 []。 PgSearch.multisearch("Red")
Ruby on Rails 新手。我正在尝试使用 pg_search gem 但遇到了一些困难(是的,我正在查看文档)。我想要一个包含文本字段和选择字段(类别)的搜索表单。这是我到目前为止的代码: c
我正在关注 this Railscasts 插曲。 如果我搜索“Kerber”,它会返回正确的文章。但是,如果我搜索“Ke”,它不会返回同一篇文章。 有办法解决这个问题吗? class Item <
我正在使用 pg-search 在模型中进行搜索。我遇到的问题是,如果我搜索一个字段或另一个字段中的关键字,它会起作用,但如果我输入我知道在我正在使用的 2 个字段中的关键字,它不会返回任何内容。 这
当尝试在文档中查找“Harrison Ford”时,pg_search 将返回任何包含“Harrison”和“Ford”的文本,例如: pg_search_scope :search_by_ful
我的“ Assets ”模型有一个搜索页面,除了搜索特定于“serial_no”字段的任何内容之外,一切正常。 Assets .rb # == Schema Information # # Table
我的模型有以下范围: class Cloth :destroy pg_search_scope :full_search, associated_against: { clo
我正在尝试在我的 Rails 应用程序中使用 pg_search gem 从一个搜索栏中搜索大量模型。 我添加了搜索栏:
我有一个使用 pg_search 的 Rails 应用程序gem 以利用 PostgreSQL 的全文搜索功能。 手册中提到搜索具有(例如)has_many 关系的模型: Searching thro
我正在尝试在我的 Rails 应用程序中实现全文搜索。我使用 PostgreSQL 作为数据库,因此,使用 PostgreSQL 的全文搜索功能。我有两个模型 Users 和 Scoreboards,
我正在使用 Rails 4.2 中的 pg_search gem 来搜索模型中的名称。我有以下内容: pg_search_scope :search_for_dashboard, lambda
我正在使用 gem pg_search在我的 postgres 数据库上执行全文搜索。我有这样的范围: pg_search_scope :fulltext, against: [:firstname,
这是我的pg_search 方法: pg_search_scope :node_search, against: [:name, :user_id, :circa, :cached_tagged_
我有一个 Node 类,我在上面设置了 acts_as_taggable,所以我可以将 user_tags 添加到任何节点。我的 Node 模型也有一个方法,可以查找 user_tag_list 中所
我在我的 Node 模型上实现了 PgSearch,如下所示: include PgSearch pg_search_scope :node_search, against: [:name, :use
有没有办法从模型而不是索引表条目中获取 pg_search 结果?我的代码有效,但我必须遍历结果。 search = PgSearch.multisearch(params[:search]) @it
我正在使用 pg_search 并尝试在标题中搜索特殊字符。 例如,我有两行包含此信息: id title 1 GT40 2 #GT40 所以当我搜索“#GT40”时,pg_se
我将 Rails 4.2.4 与 pg_search 1.0.5 一起使用。 class Advert [:title, :body] end 我想按 :created_at 对 pg_search
我正在使用这个 stackoverflow answer尝试为我的 Rails 应用程序实现 Twitter Typeahead,我还尝试实现 Github自述文件,但当我在文本框中输入内容时没有文本
我是一名优秀的程序员,十分优秀!