Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rails表单中的jQuery自动完成_Jquery_Ruby On Rails_Forms_Autocomplete - Fatal编程技术网

Rails表单中的jQuery自动完成

Rails表单中的jQuery自动完成,jquery,ruby-on-rails,forms,autocomplete,Jquery,Ruby On Rails,Forms,Autocomplete,我有一个电子邮件的Rails表单,我想在收件人字段中自动完成。以下是我所做的: = f.label :recipient_id, "Send to:" = text_field_tag :recipient_id, nil :javascript $(function() { $( "#recipient_id" ).autocomplete({ source: "#{escape_javascript url_for(:action => 'recipient_

我有一个电子邮件的Rails表单,我想在收件人字段中自动完成。以下是我所做的:

= 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调用工作正常,显示全名OK。以下是要素:

<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">

但是,当我单击Send(相当于submit)时,将发送Receipent全名而不是Receipent_id


我如何告诉Rails表单选择输入字段的值(在上面的示例中是158)而不是它的标签?

Rails对此有很好的解释。

错误HTML规范说
文本字段的文本是它将返回的值。但是您可以使用
隐藏的\u字段
来传递
\u 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);
        }
    });
});
那是从