1

こんにちは私はデータベースに手動で割り当てられた外部キーを使用してrails3-jquery-autocompletegemを設定するのに助けが必要です。

これが私のモデルの様子です

 class User < ActiveRecord::Base
   has_many :reservations, :foreign_key => 'reserver_id'
   attr_accessible :login, :first_name, :last_name
 end

class Reservation < ActiveRecord::Base
  belongs_to :reserver, :class_name => 'User'
  attr_accessible :reserver, :reserver_id, :reserver_login
end

データベースのusersテーブルには、すべての列があります

予約管理者は

autocomplete :users, :login

Routes.rbには

resources :reservations do
  get :autocomplete_users_login, :on => :collection
end

そして予約ビューで私はこれを持っています

      <%= f.autocomplete_field :reserver_id, autocomplete_users_login_reservations_path %>

テストしてみると、JavaScriptコンソールで呼び出しが行われていることがわかりますが、エラー500が発生します。たとえば、ユーザーデータベースのログイン列にあるxnoを検索しようとしました。

GET http://0.0.0.0:3000/reservations/autocomplete_users_login?term=xno 500 (Internal Server   Error) jquery.js:8241
  jQuery.ajaxTransport.send jquery.js:8241
  jQuery.extend.ajax jquery.js:7720
  jQuery.each.jQuery.(anonymous function) jquery.js:7246
  jQuery.extend.getJSON jquery.js:7263
  a.railsAutocomplete.fn.extend.init.a.autocomplete.source autocomplete-rails.js:17
  $.widget._search jquery-ui.js:6547
  $.widget.search jquery-ui.js:6540
  (anonymous function) jquery-ui.js:6335

これは、データベースで外部キーを使用しているという事実と関係がありますか?はいの場合、ルーティングをどのように構成する必要がありますか。私はgemのドキュメントに従って、usersテーブルを検索し、usersテーブルのログイン列でユーザーを一覧表示できるように設定しようとしましたが、ユーザーが選択されるとIDが返され、:reserver_idとして保存されます。 。選択フィールドで機能した以前のコードは

  <%= f.select :reserver_id, User.select_options, :prompt => true %>

ここで、select_optionsメソッドは、個々の配列にログイン文字列とIDペアの配列を作成します。

私は解決策がおそらく本当に簡単であることを知っています、あなたの助けに感謝します...

4

1 に答える 1

0

私の問題はばかげていましたが、カテゴリテーブルがカスタム外部キーを使用しているという事実とは何の関係もないことがわかりました。私の最初の問題は、単数形ではなく複数形のテーブル名を使用することでした。ユーザーへのすべての参照をユーザーに変更すると、JavaScriptコンソールが例外をスローしていないことに気付いたので、すべてが壊れて呼び出しが行われていなかったか、呼び出しが行われていてレンダリングされていなかったことがわかりました。ちゃんと。

コンソールに適切なMYSQL呼び出しが存在することで、私の疑いが確認されました。そのとき、おそらくどこかで奇妙なスタイリングが発生したために、リストがページの右側に表示されなくなっているのがわかりました。

結論として、カスタム外部キーを使用しても、gemの使用法はまったく変わりません。元のテーブル名を使用する必要があります。

于 2012-06-16T19:23:44.797 に答える