0

simple_formgemを使用しているRailsアプリがあります。関連する2つのモデル、取引と株式があります。取引フォームでは、ユーザーが自分の銘柄記号をテキストフィールドに入力できるようにしたいと思います。現在、選択ボックスをレンダリングする関連付け関数を使用しています。問題は、選択できる株が約1,000あるので、代わりにテキストフィールドが必要なことです。

これを行う方法はありますか(シンプルフォームの有無にかかわらず)?

モデル:

class Trade < ActiveRecord::Base
 belongs_to :stock
end

class Stock < ActiveRecord::Base
  has_many :trades
end

Trades#newのフォーム

<%= simple_form_for(@trade)  do |f| %>
  <%= f.association :stock %>
<% end %>
4

1 に答える 1

0

次の構文を使用できるはずです。

 <%= f.input :stock_id, :label => 'Enter your ticker:' %>

ここでの問題は、:stock_idが何であるかをユーザーが知らないことです。これは、多くのStockオブジェクトの1つへの参照であるためです。

したがって、次のような株式のリストを返す単純なjqueryオートコンプリートインターフェイスを実装することをお勧めします。

[{:ticker => 'AAPL', :name => 'Apple Inc', :id => 1}, {:ticker => 'IBM', :name => 'International Business Machines', :id => 2}, etc ]

次に、オートコンプリートの結果として次のようなものを表示できます。

AAPL - Apple Inc
IBM - International Business Machines

そして、ユーザーが探しているものを選択できるようにします。舞台裏では、:idをキャプチャし、それを関連する:stock_idとして使用します。

文字列を取得し、部分的なティッカーに基づいて株式を検索し、20などの株式の最大数を返すstocks_controllerアクションを追加する必要があります。

def search
  ticker_query = "%#{params[:ticker]}%"
  stocks = Stock.where('ticker LIKE ?', ticker_query).limit(20)
  render :json => stocks
end
于 2012-10-12T02:11:12.660 に答える