В Rails 3 я использую плагин jQuery Tokenize, но форма отправляет значение, а не идентификатор - PullRequest
3 голосов
/ 12 января 2011

Мне нравится этот плагин, я с легкостью использовал его в PHP, но сейчас я пытаюсь в Rails 3 и по какой-то причине, когда форма отправляется, она не передает идентификатор выбранный элемент, он представляет фактическую стоимость. Я даже распечатал JSON, чтобы убедиться, что данные правильно вводятся в поле ввода, и в нем отображаются идентификатор и ЗНАЧЕНИЕ.

Любые идеи о том, почему это происходит. Я думал, что, возможно, мне нужно добавить пользовательский вызов javascript для onBlur, но мне никогда не приходилось делать это до этого. У кого-нибудь есть какие-либо другие предложения или даже совершенно другой способ выполнить автозаполнение в Rails с несколькими вариантами выбора?

Я ценю любую помощь, которую вы можете мне оказать, спасибо !! И да, я знаю, что вход не очищен:)

  def autocomplete
    autolist = []
    sql = "SELECT id,username from users WHERE username LIKE '" + params[:q] + "%'"
    result = ActiveRecord::Base.connection.execute(sql)
    result.each { |field| autolist.push( {"id" => field[0], "name" => field[1]} ) }
    render :json => autolist, :layout => false
  end

Код для формы:

<% form_for @message, :url => user_messages_path(@user), :html => { :multipart => true } do |f| %>
    <tr>
        <% if @reply_to.nil? %>
        <td width="100"><p class="labels">To:</p></td>
        <td><%= f.text_field :to %>
            <%= error_message_on @message, :to %></td>
        <% else %>
      <td width="100">To: <%= @message.to %><%= f.hidden_field :to, :value => @message.to  %></td>
        <% end %>
    </tr>
  <tr>
    <% if @reply_to.nil? %>
    <td width="100"><p class="labels">Patient:</p></td>
    <td><%= f.collection_select :patient_id, Patient.find_all_by_user_id(current_user), :id, :last_name %>
        <%= error_message_on @message, :patient_id %></td>
    <% else %>
    <td width="100">Patient: <%= Patient.find(@message.patient_id).last_name %><%= f.hidden_field :patient_id, :value => @message.patient_id  %></td>
    <% end %>
  </tr>
  <tr>
    <% if @reply_to.nil? %>
    <td width="100"><p class="labels">Subject:</p></td>
    <td><%= f.text_field :subject %>
    <%= error_message_on @message, :subject %></td>
    <% else %>
    <td width="100">Subject: <%= @message.subject %><%= f.hidden_field :subject, :value => @message.subject  %></td>
    <% end %>
  </tr>
  <tr>
      <td width="100" valign="top"><p class="labels">Message:</p></td>
      <td><%= f.text_area :body %>
            <%= error_message_on @message, :body %></td>
  </tr>
  <tr>
      <td width="100" valign="top"><p class="labels">Attachment:</p></td>
      <td><%= f.file_field :attachment %><%= error_message_on @message, :attachment %></td>
  </tr>
  <tr>
      <td colspan="2"><%= submit_tag "Send" %></td>
  </tr>
</table>

Javascript

<script language="javascript">
$(function($) {
    $("#message_to").tokenInput("/users/1/friends/autocomplete", {
                hintText: "Type in the name of a colleague",
                noResultsText: "No results",
                searchingText: "Searching..."
            });
});
</script>

1 Ответ

0 голосов
/ 23 января 2011

Ваше текстовое поле и ваше скрытое поле должны иметь разные имена.

...