Reputation: 1093
This is my search form:
<%= form_tag("/kalender/:search_input", method: "get") do %>
<%= label_tag(:search_input, "Suche:") %>
<%= text_field_tag(:search_input) %>
<%= submit_tag("search") %>
<% end %>
This is my controller, getting the search_input:
@tag = params[:search_input]
if @tag.nil? || @tag.empty?
@events = Event.all
else
@events = Event.tagged_with("#{@tag}")
end
This is my route:
get "/kalender/:search_input" => 'kalender#kalender'
The problem seems to be, that this line: Event.tagged_with("#{@tag}")
doesn't work.
When I run in the rails console this command: Event.tagged_with("Metaphysik")
2 Entries were found, it works as it should.
Any ideas? Thanks in advance!
Edit: In the rails console:
irb(main):002:0> Event.tagged_with("Metaphysik")
ActsAsTaggableOn::Tag Load (0.4ms) SELECT "tags".* FROM "tags" WHERE (LOWER(name) = LOWER('metaphysik'))
Event Load (0.5ms) SELECT "events".* FROM "events" JOIN taggings events_taggings_65a1b36 ON events_taggings_65a1b36.taggable_id = "events".id AND events_taggings_65a1b36.taggable_type = 'Event' AND events_taggings_65a1b36.tag_id = 3
=> #<ActiveRecord::Relation [#<Event id: 75, title: "Loigk", description: "p", user_id: 1, created_at: "2016-05-22 15:05:05", updated_at: "2016-05-22 15:05:05">, #<Event id: 76, title: "Metaphysik", description: "d", user_id: 1, created_at: "2016-05-22 15:52:30", updated_at: "2016-05-22 15:52:30">]>
irb(main):003:0>
Server, when typed in Metaphysiker:
Started GET "/kalender/:search_input?utf8=%E2%9C%93&search_input=Metaphysiker&commit=search" for 127.0.0.1 at 2016-05-22 20:49:58 +0200
Processing by KalenderController#kalender as HTML
Parameters: {"utf8"=>"✓", "search_input"=>":search_input", "commit"=>"search"}
ActsAsTaggableOn::Tag Load (0.5ms) SELECT "tags".* FROM "tags" WHERE (LOWER(name) = LOWER(':search_input'))
Event Load (0.3ms) SELECT "events".* FROM "events" WHERE (1 = 0)
Rendered kalender/_fullkalendar.html.erb (3.2ms)
Rendered kalender/kalender.html.erb within layouts/application (6.0ms)
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1 [["id", 1]]
Completed 200 OK in 294ms (Views: 169.1ms | ActiveRecord: 1.2ms)
Upvotes: 0
Views: 32
Reputation: 11813
Your form ends up with the following action: action="/kalender/:search_input"
. It has :search_input
as the URL, literally. But you are expecting something like kalender/your_input_string
.
Change your route to:
get "/kalender/search" => 'kalender#kalender'
And in your KalenderController#search
action, access the search string with params[:search_input]
.
Upvotes: 1