Беда с рельсами3-jquery-автозаполнение - PullRequest
0 голосов
/ 19 апреля 2011

Я пытаюсь связать две модели вместе с has_many и belongs_to вместе с использованием rails3-jquery-autocomplete, но не могу заставить его извлечь какие-либо данные из таблицы vocab.

Я пытаюсь автозаполнить поле 'скиллы' данными из таблицы 'vocab'. Я могу просто передать навыки, и они правильно сохраняются в таблице «навыков», единственное, что меня беспокоит, - автозаполнение.

Буду признателен за любую помощь. Я сжал свой код только до соответствующего кода. Как примечание, у меня действительно установлен плагин, html выводит надлежащие JS и входные теги.

Заранее спасибо :) Любая помощь очень ценится.

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 Ответ

0 голосов
/ 19 апреля 2011

просто как идея ..:

в вашем коде, похоже, у вас есть несколько полей автозаполнения:

<%=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-ui, очень хорошая вещь, если вам нравится javascript:)

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