2010-04-14 5 views
0

J'ai créé une application de blog très simple en utilisant Ruby on Rails. Nouveau à la fois Ruby et Rails donc excusez les questions stupides. J'ai actuellement deux tables qui se rapportent à cette question. J'ai une table Post et une table Tag. Fondamentalement, je l'ai mis en place tel que Post has_many :tags et Tag belongs_to :post. J'utilise AJAX pour traiter et afficher les tags dans la vue de la publication.Question d'erreur de saisie semi-automatique - Ruby on Rails

J'ai installé le plugin auto_complete et j'obtiens une erreur lorsque je saisis les lettres dans le champ text_field_with_auto_complete pour la création d'un tag. Mon soupçon est que c'est parce que le formulaire est une remote_form_for ou quelque chose que je fais mal dans les routes.rb. Voici l'erreur et le code:

Erreur

Processing PostsController#show (for 127.0.0.1 at 2010-04-13 23:25:46) [GET] 
    Parameters: {"tag"=>{"tag_name"=>"f"}, "id"=>"auto_complete_for_tag_tag_name"} 
    Post Load (0.1ms) SELECT * FROM "posts" WHERE ("posts"."id" = 0) 

ActiveRecord::RecordNotFound (Couldn't find Post with ID=auto_complete_for_tag_tag_name): 
    app/controllers/posts_controller.rb:22:in `show' 

Rendered rescues/_trace (26.0ms) 
Rendered rescues/_request_and_response (0.2ms) 
Rendering rescues/layout (not_found) 

remote_form_for situé dans /views/posts/show.html.erb

<% remote_form_for [@post, Tag.new] do |f| %> 
    <p> 
     <%= f.label :tag_name, "Tag" %><br/> 
     <%= text_field_with_auto_complete :tag, :tag_name, {}, {:method => :get} %> 
    </p> 
    <p><%= f.submit "Add Comment" %></p> 
<% end %> 

tags_controller.rb (je vous épargne tous les actions mais il a ajouté ce qui suit ici)

auto_complete_for :tag, :tag_name 

routes.rb

map.resources :posts, :has_many => :comments 
    map.resources :posts, :has_many => :tags 
    map.resources :tags, :collection => {:auto_complete_for_tag_tag_name => :get } 
+0

n'oubliez pas redémarrez votre serveur après avoir modifié le fichier enviorment.rb ou routes.rb – Salil

+0

Merci Salil, je l'ai déjà fait et pas de dés. Bon conseil cependant parce qu'il m'a fallu une minute pour m'en souvenir. – bgadoci

Répondre

0
ActiveRecord::RecordNotFound (Couldn't find Post with ID=auto_complete_for_tag_tag_name): 
    app/controllers/posts_controller.rb:22:in `show' 

Cela montre que la recherche rails méthode "auto_complete_for_tag_tag_name" dans le contrôleur de messages afin soit modifier routes.rb

map.resources :posts, :collection => {:auto_complete_for_tag_tag_name => :get } 

OU

Change remote form so that it should call method 
"/tags/auto_complete_for_tag_tag_name" 
    instead of 
"/posts/auto_complete_for_tag_tag_name" 
+0

J'ai essayé l'option routes.rb et je n'arrive pas à l'obtenir. En ce qui concerne vos deuxièmes options, où exactement dois-je mettre cela? Dans le <% = text_field_with_auto_complete: tag,: tag_name, {}, {: method =>: get}%> code? Quelle est la syntaxe? – bgadoci

+0

Ah, j'ai compris. Doit également annoncer la balise auto_complete_for:, tag_name dans le contrôleur posts après avoir modifié les routs. Merci beaucoup. – bgadoci