Идентификатор ссылки rails3-jquery-autocomplete с formtastic

Я только что запустил свое приложение Rails, и у меня есть следующая проблема: я хочу использовать пользовательский интерфейс jQuery и автозаполнение, и поэтому использовал драгоценный камень 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

Как объяснено в документе драгоценного камня, я сделал конфигурацию автозаполнения в своем 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. Я имею в виду, что я хочу сохранить ссылочный идентификатор клиента в моей модели корзины, а не само имя. Я увидел возможность использовать параметр :id_element для ссылки на поле ввода идентификатора для сохранения идентификатора в форме. Я понял, что, похоже, есть проблема с комбинацией formtastic, и нашел потенциальный решение.

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

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


person Mario David    schedule 18.03.2012    source источник


Ответы (1)


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

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

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

поэтому вам нужно создать hidden_field с 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 — это элемент идентификатора, который вы хотите обновить при выборе результата.

person rbinsztock    schedule 20.03.2013