rails3-jquery-autocomplete идентификатор ссылки с помощью formtastic - PullRequest
6 голосов
/ 18 марта 2012

Я только что запустил свое приложение на Rails, и у меня возникла следующая проблема - я хочу использовать пользовательский интерфейс jQuery и автозаполнение, и поэтому использовал gem rails3-jquery-autocomplete. Я также использую formtastic для моих форм рельсов.

У меня есть две модели:

Заказчик:

class Customer < ActiveRecord::Base
  has_many :carts
end

create_table :customer do |t|
  t.column :lastname, :string
  t.column :forename, :string
end

Корзина:

class Cart < ActiveRecord::Base
  belongs_to :customer
end

create_table :cart do |t|
  t.column :costumer_id, :integer
end

Как объяснено в документе gem, я настроил автозаполнение в моем CartController: autocomplete :customer, :lastname, :full => true

На мой взгляд, с кодом формы это выглядит так:

<%= semantic_form_for @cart do |f| %>
    <%= f.inputs do %>
    <%= f.input :customer,
        :as => :autocomplete,
        :url => autocomplete_customer_lastname_carts_path,
        :id_element => '#cart_customer_id' %>

Главный вопрос, который у меня есть, это как работать с идентификаторами. Я имею в виду, я хочу сохранить ссылочный идентификатор клиента в моей модели корзины, а не само имя. Я признал возможность использовать опцию :id_element для ссылки на поле ввода идентификатора для хранения идентификатора в форме. Я выяснил, что, похоже, есть проблема с комбинацией formtastic, и нашел потенциальное решение .

Я мог бы сделать это с <%= f.input :customer_id, :as => :hidden %>, но я действительно не знаю, что написать в строке: <%= f.input :customer, :as => :autocom.... Является ли клиент правильным решением для этого? Этот подход дал бы мне следующее: "cart"=>{"customer"=>"26","customer_id"=>"0"}

У кого-нибудь есть идея, возможно, я совершенно не понимаю всего этого: id_element вещь ...

1 Ответ

2 голосов
/ 20 марта 2013

Вы также указали неверное имя столбца в своей миграции.

create_table :cart do |t|
  t.column :customer_id, :integer
end

хорошо, я нашел его:)

, поэтому вам нужно создать поле hidden_id с customer_id и указать автозаполнение для обновленияэто входное значение.тег: update_elements => {}

<%= autocomplete_field_tag "cart_customer_name", "" , autocomplete_customer_lastname_carts_path, :id_element => "#customer_customer_id", :update_elements => {} %><br />
<%= f.hidden_field :customer_id %>

Итак: id_element - это элемент id, который вы хотите обновить при выборе результата.

...