0

アプリでテキストを使用していますが、機能が爆発しています。次のコード:

Background:
  Given the following "project" records:
    | name      |
    | Project 1 |
    | Project 2 |
  And I am on "the projects page"

Scenario: Find projects by content
  When I search for "Project 1"
  Then I should see the project called "Project 1" in the project list

次のメッセージが表示されます。

When I search for "Project 1" # features/step_definitions/search_steps.rb:11

  PG::Error: ERROR:  function similarity(character varying, unknown) does not exist
  LINE 1: SELECT "projects".*, similarity("projects"."name", 'Project\...

  HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
  : SELECT "projects".*, similarity("projects"."name", 'Project\ 1') AS "rank79552331411843676" FROM "projects"  WHERE (("projects"."name" % 'Project\ 1'))  ORDER BY "rank79552331411843676" DESC (ActionView::Template::Error)

あいまい検索を使用しているため、Postgres に Trigram モジュールをインストールしましたが、開発中はすべて正常に動作します。このエラー メッセージの意味がよくわかりません。これが私のコードのもう少しです:

# search_steps.rb
When(/^I search for "(.*?)"$/) do |query|
  fill_in 'query', with: query
  click_button 'Search'
end

# GET /projects
def index
  @projects = Project.search(params[:query])
end

# project.rb
def self.search(query)
  return all unless query.present?
  fuzzy_search(query)
end

誰かがこれに遭遇して修正しましたか?

4

2 に答える 2

0

この問題に遭遇した他の人は、bundle exec rake textacular:install_trigram好きなように実行できますが、rake を使用して cucumber または rspec を実行すると、db:test:prepare が呼び出されます。trigram は移行によってインストールされていないため、これはスキーマがロードされたときにデータベースから消去する効果があります!

# install trigram in test db
bundle exec rake textacular:install_trigram RAILS_ENV=test

# wipe trigram from db
rake cucumber
rake rspec

これを防ぐには、rake を使用せずに cucumber と rspec を実行してください。

# run cucumber and rspec without rake
cucumber
rpsec

なんて恐ろしい問題でしょう!修正に2日など...

于 2013-07-02T16:52:14.527 に答える