Metaphysiker
Metaphysiker

Reputation: 1093

Controller doesn't read search_input, Ruby on rails

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

Answers (1)

Uzbekjon
Uzbekjon

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

Related Questions