#jquery #ruby-on-rails #ruby #ruby-on-rails-3 #rubygems
#jquery #ruby-on-rails #ruby #ruby-on-rails-3 #rubygems
Вопрос:
Я пытаюсь связать две модели вместе с помощью has_many
и belongs_to
наряду с использованием rails3-jquery-autocomplete, но, похоже, я не могу заставить его извлекать какие-либо данные из vocab
таблицы.
Я пытаюсь автоматически заполнить поле «навыки» данными из таблицы «vocab». Я могу отправлять навыки просто отлично, и они должным образом сохраняются в таблице «навыки», автозаполнение — единственное, что меня беспокоит.
Я был бы признателен за любую помощь. Я сократил свой код только до соответствующего кода. В качестве примечания, у меня действительно правильно установлен плагин, html выводит соответствующие теги JS и input.
Заранее спасибо 🙂 Любая помощь приветствуется.
users_controller.rb
class UsersController < ApplicationController
autocomplete :vocab, :name
def new
@user = User.new
3.times do
skill = @user.skills.build
end
end
end
user.rb
class User < ActiveRecord::Base
has_many :skills, :dependent => :destroy
accepts_nested_attributes_for :skills
end
skill.rb
class Skill < ActiveRecord::Base
belongs_to :user
end
_form.html.erb
<%= form_for(@user) do |f| %>
<% f.fields_for :skills do |builder| %>
<%= render "skill_fields", :f => builder %>
<% end %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
_skill_fields.html.erb
<p>
<%=f.label :skill_name, "Skill" %>
<%=f.autocomplete_field :skill_name, users_autocomplete_vocab_name_path %>
</p>
routes.rb
MyApp::Application.routes.draw do
get 'users/autocomplete_vocab_name'
end
База данных
user
-id
skills
-user_id
-skill_name
vocab
-name
Ответ №1:
просто как идея .. :
похоже, что в вашем коде есть несколько полей автозаполнения :
<%=f.autocomplete_field :skill_name, users_autocomplete_vocab_name_path %>
если все эти поля имеют одинаковые атрибуты html ‘id’ и ‘name’ (что, скорее всего, и происходит), js может не получить нужное вам поле.
Итак, просто для пояснения: 1. В журнале вашего сервера вы видите, что запрос действительно достигает вашего контроллера? (users_autocomplete_vocab_name_path) 2. Что-нибудь изменится, если вы оставите в своем представлении только одно поле автозаполнения?
Просто небольшое замечание. Если у вас в вашем приложении менее 100-200 навыков, вы могли бы вывести все это в виде json в какой-нибудь скрытый div, проанализировать его с помощью jquery и заставить автозаполнение работать локально. Это будет работать быстрее, и вы избежите дополнительных запросов к вашему веб-серверу и базе данных. Некоторое время назад мне пришлось реализовать ту же функциональность (автозаполнение имен друзей пользователя). Я сделал так, что если у пользователя менее 250 друзей — автозаполнение локально, в противном случае — автозаполнение с сервера. Кстати, я использовал jquery-автозаполнение пользовательского интерфейса, действительно хорошая вещь, если вам нравится javascript 🙂
Комментарии:
1. Спасибо, Влад — я попробую. К сожалению, у нас будет более 10 000 записей, поэтому локальное использование не вариант :/
2. Оказывается, я идиот. Я использовал поврежденный файл jQuery. Блин.