小编Rab*_*yal的帖子

如何将供应商资产导入 webpacker?

我在 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

6
推荐指数
0
解决办法
589
查看次数

在 rails 5 应用程序中添加 postgres 扩展时无法运行迁移

我想使用 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)

postgresql ruby-on-rails ruby-on-rails-5

5
推荐指数
1
解决办法
2691
查看次数

顺序扫描使用 varchar_pattern_ops 索引的列

我有一个用户表,它包含位置列。我使用 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)

到底是怎么回事?

sql postgresql indexing database-design pattern-matching

3
推荐指数
1
解决办法
2374
查看次数

has_one 关联在 rails 中创建多条记录

我有一个 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)

ruby activerecord ruby-on-rails rails-activerecord

2
推荐指数
1
解决办法
892
查看次数