Rails 3自动完成

Mar*_*iev 1 autocomplete ruby-on-rails

我有些问题.任何人都可以帮我解决我的错误吗?我正在使用来自https://github.com/mikeauclair/rails3-jquery-autocomplete的 rails 3 autocomplete gem 并按照所有说明操作,但有错误:

undefined method `autocomplete_user_nickname' for #<Message:0xa09374c>
Run Code Online (Sandbox Code Playgroud)

我的路线:

resources :messages do
   get :autocomplete_user_nickname, :on => :collection
end
Run Code Online (Sandbox Code Playgroud)

MessagesController.rb:

autocomplete  :user, :nickname
Run Code Online (Sandbox Code Playgroud)

我的new.html.erb:

<% form_for @message, :url => user_messages_path(@user) do |f| %>
  <%= f.text_field :sender_id %>
  <%= f.autocomplete_field :autocomplete_user_nickname, autocomplete_user_nickname_messages_path %>
  <%= f.text_field :subject %>
  <%= f.text_area :body %>
  <%= submit_tag "Send" %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

我做错了什么?谢谢.

Mic*_*ley 5

根据您链接的项目的自述文件,您的表单字段不正确.你有:

<%= f.autocomplete_field :autocomplete_user_nickname, autocomplete_user_nickname_messages_path %>
Run Code Online (Sandbox Code Playgroud)

自述文件说它应该是:

<%= f.autocomplete_field :user_nickname, autocomplete_user_nickname_messages_path %>
Run Code Online (Sandbox Code Playgroud)

[编辑]

根据您的评论,我假设您有以下内容:

class Message < ActiveRecord::Base
  belongs_to :user
end

class MessagesController
  def new
    @message = Message.new
  end
end
Run Code Online (Sandbox Code Playgroud)

我认为您应该使用以下内容作为您的观点:

<%= form_for(@message) do |f| %>
  <%= f.hidden_field :user_id, :id => "real_user_id"
  To: <%= autocomplete_field_tag 'throwaway_user', '',
          autocomplete_user_nickname_messages_path,
          :size => 75, :id_element => '#real_user_id' %> <br />
  Subject: <%= f.text_field :subject %>
  etc...
<% end %>
Run Code Online (Sandbox Code Playgroud)

这样,自动完成字段只是一些一次性数据,但是当它自动完成时,它会将真实用户ID标记(带有ID real_user_id)的值更新为自动完成用户的ID.

[另一个编辑]

由于我不确定你上次评论后的问题是什么,我决定自己制作一个小应用程序.它似乎对我来说很好,所以我假设你的模型有些东西.

你可以在这个GitHub比较视图中看到我做了什么来实现它; 我遗漏了无聊的东西,比如安装jQuery和jQuery UI.您可以在自述文件中看到该应用实际在屏幕截图中工作.希望这可以帮助.