1

大学モデルの大学名のオートコンプリート リストを表示する教育フォームのテキスト ボックスがあります。私がしたいことは、ユーザーが新しいエントリを追加できないようにすることです。つまり、大学名がオートコンプリート リストにない場合、ユーザーは新しい名前を追加できませんが、そうではありませんこれを行うことができます。ユーザーがオートコンプリート リストのテキストボックスにない名前を入力した場合は、クリアする必要があります

以下は私の教育/フォーム、html.hamlコードです:

= f.label :college_id, "College<em>*</em><small>college name</small>".html_safe
= f.text_field :college_id
:javascript
$(document).ready(function() {   
    var a = ["abcd","abc"];
    $('#education_college_id').focus().autocomplete(#{colleges_names_arr});
}); 

私のapplication_helperでは、オートコンプリート用に次のコードを書きました。

def colleges_names_arr(colleges=[])
req_colleges = College.all
colleges_names = req_colleges.collect{|col|col.full_name}.to_json
end

ユーザーが新しいデータと空のテキストボックスを追加できないようにするには、何を書くべきですか?

4

1 に答える 1

1

JQuery-UIオートコンプリートのデフォルト機能ではなく、コンボボックスの例が必要だと考えてください。

http://jqueryui.com/demos/autocomplete/#combobox

入力テキストに提供されたリストの値が含まれていることを確認するためのチェックが含まれているため(またはテキストが空白に置き換えられているため)、単純なテキストボックスよりもはるかに複雑です。

または、提出時にパラメータをチェックして(とにかくこれを行うことをお勧めします)、パラメータ値が大学のリストに含まれていることを確認できます。

もう1つのポイントは、大学のIDを大学名だけを選択するために渡していないように見えることです。オートコンプリートを取得して大学のIDと名前の両方を返すのは面倒です(https://githubを参照してください)。 com / crowdint / rails3-jquery-autocomplete)。

更新および作成アクションでは、レコードを保存する前に、提供された大学名を取得し、College.find_by_name()を介して検索する必要があります。おそらく、text_field_tagcollege_nameを使用してparams [:college_name]を返します(これは、Educationフォームの残りの部分には依存しません)。

_form.html.haml

= label_tag :college_name, "College<em>*</em><small>college name</small>".html_safe
= text_field_tag :college_name
:javascript
$(document).ready(function() {   
    var a = ["abcd","abc"];
    $('#college_name').focus().autocomplete(#{colleges_names_arr});
}); 

Education_controller.rb

*作成および更新アクションで

education = Education.create!(params)
college = College.find_by_name(params[:college_name])
if college
  education.college = college
end

これを行うためのよりクリーンな方法は間違いなくあります。

于 2012-05-09T09:46:44.577 に答える