Автозаполнение Rails 3

У меня есть проблема. Может ли кто-нибудь помочь мне с моей ошибкой? Я использую гем автозаполнения рельсов 3 из https://github.com/mikeauclair/rails3-jquery-autocomplete и следуйте всем инструкциям, но возникает ошибка:

undefined method `autocomplete_user_nickname' for #<Message:0xa09374c>

Мои маршруты:

resources :messages do
   get :autocomplete_user_nickname, :on => :collection
end

MessagesController.rb:

autocomplete  :user, :nickname

Мой новый.html.erb:

<% form_for @message, :url => user_messages_path(@user) do |f| %>
  <%= f.text_field :sender_id %>
  <%= f.autocomplete_field :autocomplete_user_nickname, autocomplete_user_nickname_messages_path %>
  <%= f.text_field :subject %>
  <%= f.text_area :body %>
  <%= submit_tag "Send" %>
<% end %>

Что я делаю неправильно? Спасибо.


person Marat_Galiev    schedule 02.04.2011    source источник


Ответы (3)


Согласно файлу Readme в проекте, на который вы ссылаетесь, ваше поле формы неверно. У вас есть:

<%= f.autocomplete_field :autocomplete_user_nickname, autocomplete_user_nickname_messages_path %>

В Readme сказано, что это должно быть:

<%= f.autocomplete_field :user_nickname, autocomplete_user_nickname_messages_path %>

[Изменить]

Основываясь на ваших комментариях, я предполагаю, что у вас есть что-то вроде следующего:

class Message < ActiveRecord::Base
  belongs_to :user
end

class MessagesController
  def new
    @message = Message.new
  end
end

Я думаю, вы должны использовать что-то вроде следующего для вашего представления:

<%= form_for(@message) do |f| %>
  <%= f.hidden_field :user_id, :id => "real_user_id"
  To: <%= autocomplete_field_tag 'throwaway_user', '',
          autocomplete_user_nickname_messages_path,
          :size => 75, :id_element => '#real_user_id' %> <br />
  Subject: <%= f.text_field :subject %>
  etc...
<% end %>

Таким образом, поле автозаполнения представляет собой просто одноразовые данные, но при автозаполнении оно обновит значение тега реального идентификатора пользователя (с идентификатором real_user_id), чтобы оно стало идентификатором пользователя, заполнившего данные автоматически.

[Другое редактирование]

Поскольку я не был уверен, в чем проблема после вашего последнего комментария, я решил сделать небольшое приложение самостоятельно. Кажется, у меня все работает нормально, поэтому я предполагаю, что с вашей моделью что-то не так.

Вы можете увидеть, что я сделал для реализации этого, в этом представлении сравнения GitHub; Я пропустил скучные вещи, такие как установка jQuery и пользовательского интерфейса jQuery. Вы можете увидеть, как приложение действительно работает, на снимках экрана в файле readme. Надеюсь это поможет.

person Michelle Tilley    schedule 02.04.2011
comment
Да, конечно, моя ошибка, но ошибка все еще существует: неопределенный метод `user_nickname' для #‹Message:0xa118f50› - person Marat_Galiev; 02.04.2011
comment
Как называется поле в модели Message, которое вы хотите заполнить автозаполнением? Это должен быть первый параметр f.autocomplete_field, как и у других хелперов формы. - person Michelle Tilley; 02.04.2011
comment
Нет, мне нужно автозаполнять псевдонимы пользователей (модель пользователя), пользователь нажимает на ссылку «Новое сообщение», и псевдоним пользователя должен быть автозаполнен. - person Marat_Galiev; 02.04.2011
comment
Если вы не заполняете атрибут модели, вам, вероятно, следует использовать вызов autocomplete_field_tag, как показано в разделе View в файле Readme. Если вам нужен идентификатор пользователя, вы можете создать фактическое поле f.user_id или что-то еще в объекте Message и использовать метод Получение идентификатора объекта (также в файле Readme), чтобы соответствующим образом обновить форму. - person Michelle Tilley; 02.04.2011
comment
Я обновил свой ответ в соответствии с моим последним комментарием. Это делает вас ближе? - person Michelle Tilley; 02.04.2011
comment
Да, теперь страница отображается нормально, но я вижу в ошибках firebug: ActiveRecord::RecordNotFound in MessagesController#autocomplete_user_nickname Не удалось найти пользователя без идентификатора - person Marat_Galiev; 02.04.2011
comment
Я использую: ‹%= autocomplete_field_tag ​​'user_nickname', '', autocomplete_user_nickname_messages_path, :id_element =› :sender_id %› В модели сообщений у меня есть поля sender_id и Receiver_id. - person Marat_Galiev; 02.04.2011
comment
:id_element должен быть селектором в стиле jQuery, например. #id_of_element -- однако я не думаю, что это вызывает ошибки ActiveRecord. У вас есть какие-либо следы, которые вы можете опубликовать? - person Michelle Tilley; 02.04.2011
comment
Хорошо я понял. Но метод автозаполнения не возвращает мне ник пользователя, любой XHR возвращает мне ошибку 404... - person Marat_Galiev; 02.04.2011
comment
Stacktraces: ActiveRecord::RecordNotFound в MessagesController#autocomplete_user_nickname Не удалось найти пользователя без идентификатора - person Marat_Galiev; 02.04.2011
comment
app/controllers/messages_controller.rb:59:in set_user' activerecord (3.0.5) lib/active_record/relation/finder_methods.rb:279:in find_with_ids' activerecord (3.0.5) lib/active_record/relation/finder_methods.rb:107:in find' activerecord (3.0.5) lib/active_record/base.rb:439:in find' - person Marat_Galiev; 02.04.2011
comment
Я обновил свой ответ рабочим примером, исходный код находится на GitHub. Не уверен, что случилось с вашим собственным приложением. Надеюсь, поможет. Удачи! - person Michelle Tilley; 03.04.2011
comment
Просто хочу, чтобы вы знали, что 13 сентября 2014 года ваш ответ помог 22-летнему программисту в 6:11 утра по восточному поясному времени, который до поздней ночи создает приложение для рельсов. Я благодарю вас от всего сердца. ‹3 - person Arthur Collé; 13.09.2014

Я думаю, что гораздо лучше использовать autocomplete.git. Это работает в Rails 3. Это просто.

https://github.com/rails/auto_complete/pull/9

Но если вы знаете, как использовать jquery gem, я прошу вас указать свое решение и указать, где МЫ делаем ошибку.

Пока....

person Eduardo de Oliveira Vasconcelo    schedule 15.07.2011

На самом деле опция :id_element не работает, и если вы устанавливаете из этого вилки github, она будет работать.

gem 'rails3-jquery-autocomplete', :git => 'git://github.com/juniorz/rails3-jquery-autocomplete.git'

person Reinaldo Junior    schedule 28.07.2011