ActiveRecord :: RecordNotFound (не удалось найти пользователя с 'id' = json) - PullRequest
0 голосов
/ 10 марта 2019

Я работаю над функцией автозаполнения в моем приложении на Rails и следую ответу от Как настроить автозаполнение jquery-ui в Rails . Когда я что-то набираю в input, появляется эта ошибка: ActiveRecord::RecordNotFound (Couldn't find User with 'id'=json)? (:term все равно равно тому, что я печатаю) Почему там id=json?

<div>
  <input id="select_user" />
  <input id="link_user_id" name="link[user_id]" type="hidden"/>
</div>

<script type="text/javascript">
  $(function() {
    $('#select_user').autocomplete({
      minLength: 1,
      source: '<%= user_path(:json) %>',
    })
    .data("ui-autocomplete")._renderItem = function( ul, item ) {
      return $( "<li></li>" )
        .data( "ui-autocomplete-item", item )
        .append( "<a>" + item.user.name + "</a>" )
        .appendTo( ul );
    };
  });
</script>

Пользовательский контроллер:

def index
  if params[:term]
    @users = User.find(:all, :conditions => ['name LIKE ?', "%#{params[:term]}%"])
  end

  respond_to do |format|
    format.html
    format.json { render :json => @users.to_json }
  end
end

Ответы [ 2 ]

4 голосов
/ 10 марта 2019

Вы выдаете здесь:

source: '<%= user_path(:json) %>'

Первый атрибут, который передается в эти помощники URL, всегда object или id.Так что ваша проблема намного раньше, чем все, что было упомянуто в комментариях.

user_path({}, format: :json) было бы для добавления формата.Этот отсканированный код, вероятно, вернет ActiveRecord::RecordNotFound (Couldn't find User with 'id'=nil).Поэтому вам нужно найти способ передачи идентификатора.

Я полагаю, вы хотите, чтобы все пользователи вернули это совпадение в вашем index действии.Для этого вы должны использовать users_path(format: :json).

0 голосов
/ 10 марта 2019

Попробуйте новый синтаксис

User.where("name LIKE ?", "%#{params[:term]}%")

Я думаю, что используемый вами синтаксис устарел в rails 3

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