如何控制json渲染的内容?

时间:2015-01-30 05:22:32

标签: javascript jquery ruby-on-rails json rendering

我使用Typeahead显示建议的下拉列表:

控制器:

def typeahead
  render json: User.where(name: params[:query])
end

查看:

<input type="text" id="typeahead">
<script type="text/javascript">
  var bloodhound = new Bloodhound({
    datumTokenizer: function (d) {
      return Bloodhound.tokenizers.whitespace(d.value);
    },
    queryTokenizer: Bloodhound.tokenizers.whitespace,

    remote: '/typeahead/%QUERY', 
    limit: 50
  });
  bloodhound.initialize();

  $('#typeahead').typeahead(null, {
    displayKey: 'name',
    source: bloodhound.ttAdapter()
  });

  $('#typeahead').bind('typeahead:selected', function(event, datum, name) {
    doSomething(datum.id);
  });
</script>

它会显示User.name的列表。我怎么能为每个用户渲染User.email

2 个答案:

答案 0 :(得分:1)

尝试这样的事情吗?

render json: User.where(name: params[:query]).as_json(only: :email)

答案 1 :(得分:1)

displayKey要么显示建议对象的字段名,要么函数将建议对象转换为字符串。

$('#typeahead').typeahead(null, {
    displayKey: function(suggestion){
        return suggestion.name + " " + suggestion.email; 
    },
    source: bloodhound.ttAdapter()
});