Автозаполнение jQuery в форме Rails - PullRequest
1 голос
/ 23 марта 2012

У меня есть форма Rails для электронной почты, и я хотел бы иметь автозаполнение в поле Receiver. Вот что я сделал:

= f.label :recipient_id, "Send to:"
= text_field_tag :recipient_id, nil
:javascript
 $(function() {
    $( "#recipient_id" ).autocomplete({
        source: "#{escape_javascript url_for(:action => 'recipient_autocomplete',
                     :controller => 'sent')}",
        minLength: 2,
        select: function( event, ui ) {
            $('input#recipient_id').attr('value', ui.item.value);
            ui.item.value = ui.item.label
        }
    });
});

В моем контроллере у меня есть:

  def recipient_autocomplete
    @users= User.all(:conditions => ['first_name LIKE ? OR last_name LIKE?', 
      "%#{params[:term]}%", "%#{params[:term]}%"])
    render :json => @users.collect {|x| {:label=>x.full_name, :value=>x.id}}.compact
  end

Вызов json работает нормально и отображает полное имя ОК. Вот элемент:

<input type="text" name="recipient_id" id="recipient_id" class="ui-autocomplete-input"
  autocomplete="off" role="textbox" aria-autocomplete="list" 
  aria-haspopup="true" value="158">

Однако, когда я нажимаю Отправить (эквивалентно отправке), полное имя получателя отправляется вместо receient_id.

Как мне сказать, чтобы форма Rails выбрала значение (158 в приведенном выше примере) поля ввода вместо его метки?

Ответы [ 2 ]

1 голос
/ 23 марта 2012

Хорошо, спецификация HTML говорит, что текст text_field - это значение, которое он собирается вернуть.Но вы можете просто использовать hidden_field для передачи _id следующим образом:

= f.label :recipient_id, "Send to:"
= text_field_tag :recipient_name, nil
= hidden_field_tag :recipient_id, nil
:javascript
 $(function() {
    $( "#recipient_id" ).autocomplete({
        source: "#{escape_javascript url_for(:action => 'recipient_autocomplete',
                     :controller => 'sent')}",
        minLength: 2,
        select: function( event, ui ) {
            $('input#recipient_name').val(ui.item.label);
            $('input#recipient_id').val(ui.item.value);
        }
    });
});

Это из Эта страница JqueryUI

1 голос
/ 23 марта 2012

У вас очень хороший состав рельсов здесь об этом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...