我在 vendor/stylesheets 和 vendor/javascript 目录中添加了一些 javascript 和 css 库。我无法在我的 app/javascript/packs/application.js 中导入它们。我使用 webpacker 作为我的资产管道。
ruby-on-rails asset-pipeline ruby-on-rails-5 webpacker ruby-on-rails-5.2
我想使用 Postgres 的 pg_trgm 扩展来使用查询进行搜索
SELECT * FROM USERS WHERE location like '%new%' ORDER BY location DESC;
Run Code Online (Sandbox Code Playgroud)
由于 Postgres 已经没有 pg_trgm 我需要执行一个命令来安装它。所以我这样做的迁移是
class Addtrigramindexlocationtousers < ActiveRecord::Migration[5.1]
def change
reversible do |direction|
direction.up {
execute %{
CREATE EXTENSION IF NOT EXISTS pg_trgm;
CREATE INDEX index_users_trigram_on_location ON users USING gin (location gin_trgm_ops);
}
}
direction.down {
execute %{
DROP INDEX index_users_trigram_on_location;
}
}
end
end
end
Run Code Online (Sandbox Code Playgroud)
因此,当我运行此迁移时,它给了我这个错误:
ActiveRecord::StatementInvalid: PG::InsufficientPrivilege: ERROR: permission denied to create extension "pg_trgm"
HINT: Must be superuser to create …Run Code Online (Sandbox Code Playgroud) 我有一个用户表,它包含位置列。我使用 varchar_pattern_ops 索引了位置列。但是当我运行查询规划器时,它告诉我它正在执行顺序扫描。
EXPLAIN ANALAYZE
SELECT * FROM USERS
WHERE lower(location) like '%nepa%'
ORDER BY location desc;
Run Code Online (Sandbox Code Playgroud)
它给出以下结果:
Sort (cost=12.41..12.42 rows=1 width=451) (actual time=0.084..0.087 rows=8 loops=1)
Sort Key: location
Sort Method: quicksort Memory: 27kB
-> Seq Scan on users (cost=0.00..12.40 rows=1 width=451) (actual time=0.029..0.051 rows=8 loops=1)
Filter: (lower((location)::text) ~~ '%nepa%'::text)
Planning time: 0.211 ms
Execution time: 0.147 ms
Run Code Online (Sandbox Code Playgroud)
我已经通过 stackoverflow 进行了搜索。发现大多数答案都类似于“postgres 在大表中执行顺序扫描,以防索引扫描速度变慢”。但我的桌子也不大。
我表中的索引users是:
"index_users_on_lower_location_varchar_pattern_ops" btree (lower(location::text) varchar_pattern_ops)
Run Code Online (Sandbox Code Playgroud)
到底是怎么回事?
我有一个 User 模型和 Shop 模型。我想允许用户只创建一个商店。所以在我的用户模型中
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
validates :terms_and_conditions, :acceptance => true
has_one :shop
end
Run Code Online (Sandbox Code Playgroud)
我的商店模型看起来像这样
class Shop < ApplicationRecord
has_many :products, dependent: :destroy
belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)
但是从控制台,如果我尝试为已经拥有一家商店的用户创建一家新商店,则没有错误并成功提交。
[
#<Shop id: 1, name: "Rabin & Rose Shop", location: "Banepa Kavre Nepal", description: "oho k vhk kl;o jjio ko;k; jljlkj", rating: nil, delivery_service: true, user_id: 1, created_at: "2017-09-27 …Run Code Online (Sandbox Code Playgroud)