2017-01-02 14 views
0

私は2つのモデル:ドキュメントとキーワードを持っています。彼らはお互いに関係しているので、私はネストされたフォームを作成することができるので、お互いにとお互いに関係しています。それはうまくいく。 ruby​​ map find_eachは配列に追加できません

だからのparamsに、私はこのように別々の配列にキーワードを入れてコントローラで

"document"=>{"book_id"=>"1", "keywords"=>{"keywords"=>"term, administration, witness "}, ... 

を持っている:

q = params[:document][:keywords].fetch(:keywords).split(",") 

これは、あまりにもうまく動作します。

私が今必要とするのは、キーワードidsを取得して配列に入れることです。その配列の各要素は、結合表に移入します。

私はこれを試してみた:

a = Array.new 
q.each do |var| 
    id = Keyword.select(:id).find_by keyword: var 
    a << id 
    id 
end 

しかし、サーバのログはすべて3つのSQL要求が実行され、それらが正しいことを示しているが、これは唯一、[#<Keyword id: 496>, nil, nil]を答えます。

また、私はこれを試してみました:

a = Array.new 
q.map do |e| 
    Keyword.where(motcle: e).select(:id).find_each do |wrd| 
    a << wrd.id 
    end 
end 

その後、再び、これが唯一のキーワードの最初のIDを返す、サーバーログはすべて3つのSQL要求が実行されていることを示しているが。すべてのSQLリクエストを実行するサーバにもかかわらず、

1 /なぜIDが配列に追加されていない:私は取得しようとしている何

a = [496, 367, 2398]は、だから私は2つの質問があるのですか?で作成する方法を

2 /要求が

SELECT "motclefs"."id" FROM "motclefs" WHERE "motclefs"."motcle" in ('déchéances','comtesse') ORDER BY "motclefs"."id"; 

おかげだろうレール!

+0

でしょうか? – Stefan

+0

はい、それは簡単でしょうが、jsonのjquery-uiオートコンプリート関数でキーワードが取得されるのを見ることができません。 ''キーワード "=>" 496 "、" administration "=>" 966 "、" witness "=>" 1046 "}' – thiebo

+0

のようなものが必要です。 keyword_ids "=> [496、966、1046]' – Stefan

答えて

1

戻り値はKeywordのオブジェクトです。オブジェクトのid属性を取得する必要があります。例:すべてのIDを取得する

id = Keyword.where(keyword: var).select(:id).first.id 

良い方法は、フォームからあなたのコントローラに**キーワード** IDを渡すことが容易ではないでしょう

a = Keyword.where(keyword: ['term', 'administration', 'witness']).pluck(:id) 
# I think this might answer your second question. 
+0

Santhoshありがとうございますが、その2番目のコードをどのようにしてどこに統合しますか? – thiebo

+0

'id = Keyword.select(:id).find_by(キーワード:var).id'は'未定義のメソッドID'を返します。 – thiebo

+0

どのようにids( 'a')の配列を使用していますか? 2番目のステートメントは配列を設定するだけです – Santhosh

関連する問題