2016-04-27 17 views
0

ich ein einfaches Tagging-System in meine Webapp bauen (Ich habe diese Schritte befolgt: http://www.sitepoint.com/tagging-scratch-rails/)Rails: Suchformular für Stichworte

, So, jetzt ist es funktioniert gut, dass die Menschen auf einem Tag klicken können, zum Beispiel Hunde und sie gehen auf "app.com/search/dogs".

Aber jetzt sollten die Leute auch nach Tags suchen, indem sie ein Formular-Eingabefeld verwenden. Im Moment habe ich versucht, dies:

<%= form_tag('search', method: 'get', controller: 'static', action: 'home') do %> 
    <%= text_field_tag :tag, params[:tag], placeholder: "Search Posts" %> 
    <%= submit_tag("Search") %> 
<% end %> 

, dass der Benutzer bringt: „app.com/search/?utf8=✓ & tag = Hunde & begehen = Suchen“ und das ist nicht funktioniert. Gibt es eine Möglichkeit, die andere Logik zu erreichen?

Hier einige (vielleicht) interessante Codebeispiele:

routes.rb

# search by tags 
get 'search/:tag', to: 'static#home', as: "search" 

post.rb

def self.tagged_with(name) 
Tag.find_by_name!(name).posts 
end 

static_controller.rb

def home 
    if params[:tag] 
    @posts = Post.tagged_with(params[:tag]) 
    else 
    @posts = Post.all 
    end 
end 

posts_helper.rb

def tag_links(tags) 
    tags.split(",").map{|tag| link_to tag.strip, search_path(tag.strip) }.join(" ") 
end 

Sorry, ich bin ein echter Anfänger :) Vielen Dank im Voraus!

Antwort

1

Lassen Sie mich mit einer Notiz beginnen. Die form_tag nimmt keine controller oder action Parameter. Im Moment werden sie nur als Formular-HTML-Tag-Attribute gedruckt.

<%= form_tag('search', method: 'get') do %> 

Nun, um zurück zu Ihrer Frage:

<%= form_tag('search', method: 'get', controller: 'static', action: 'home') do %> 

# Generates 
<form controller="static" action="search" accept-charset="UTF-8" method="get"> 

Sie wahrscheinlich zu tun bedeuten. Grundsätzlich möchten Sie das Attribut action Ihres Formulars dynamisch festlegen. Dies ist nur möglich, wenn Sie Javascript verwenden.

eine Klasse zu Ihrer Suche Formular-Tag hinzufügen:

<%= form_tag('search', method: 'get', class: 'tag-search-form') do %> 

diesen Javascript-Code in Ihrer Seite hinzufügen:

$(document).ready(function(){ 
    $('.tag-search-form').submit(function(e){ 
    var new_action_url = $(this).attr('action') + "/" + $('#tag', this).val(); 
    $(this).attr('action', new_action_url) 
    }); 
}); 

Dieser Benutzer zu search/{tag-field-value} URL senden. Aber es würde alle Parameter dazu hinzufügen (search/test?utf8=✓&tag=test&commit=Search). Wenn Sie sie nicht möchten, müssen Sie sie vor dem Senden in JavaScript entfernen oder alternativ das Attribut method des Formulars auf POST setzen.

+0

Sorry, ich sehe, dass ich zuerst dumme Sachen ausprobiert habe! Aber deine Lösung funktioniert großartig! vielen Dank! – FNGR

Verwandte Themen