Мой контроллер поиска сломался без ошибок и не будет отображаться соответствующим образом

#ruby-on-rails #search

#ruby-on-rails #Поиск

Вопрос:

У меня есть это в поиске / индексе:

 <%= form_tag search_index_path, method: :get do %>
  <%= text_field_tag :title, params[:title], placeholder: "title" %>
  <%= text_field_tag :content, params[:content], placeholder: "content" %>
  <%= submit_tag "Search", name: nil %>
<% end %>
<div class="section">
  <div class=content>
    <% @posts.each do |post| %>
      <%= post.title %>
      <%= post.content %>
    <% end %>
  </div>
</div
  

И это мой контроллер поиска:

 content_term = params[:content]
title_term = params[:title]

if content_term
  @posts = Post.where('content LIKE ?', "%#{content_term}%")
else
  @posts = Post.all.order("created_at DESC")
end

if title_term
  @posts = Post.where('title LIKE ?', "%#{title_term}%")
else
  @posts = Post.all.order("created_at DESC")
end

if content_term != 0 and title_term != 0
  @posts = Post.search(content_term, title_term)
else
  @posts = Post.all.order("created_at DESC")
end
  

Он не работает ни с одним термином по отдельности, ни с обоими терминами вместе.

Это метод .search из Post.rb:

 def self.search(content_term, title_term)
  return scoped unless content_term.present? || title_term.present?
  where(['content LIKE ? AND title LIKE ?', "%#{content_term}%", "%#{title_term}%"]) 
end
  

Он загружается нормально, поэтому URL для search_index_path отлично работает в маршрутах, но это что-то о :gets и : posts или дополнительных типах данных, которые я, похоже, не знаю.

Как вы можете видеть, параметры подключены между контроллером и представлением и передаются через контроллер в SQL, но он не возвращает posts .

Журналы сервера:

 Started GET "/search?utf8=✓amp;title=amp;content=ods" for 127.0.0.1 at 2019-03-04 08:10:57  1100
Processing by SearchController#index as HTML
  Parameters: {"utf8"=>"✓", "title"=>"", "content"=>"ods"}
  User Load (3.4ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT $2  [["id", 1], ["LIMIT", 1]]
  ↳ /Users/adenhandasyde/.rvm/gems/ruby-2.4.0/gems/activerecord-5.2.2/lib/active_record/log_subscriber.rb:98
   (0.2ms)  BEGIN
  ↳ /Users/adenhandasyde/.rvm/gems/ruby-2.4.0/gems/activerecord-5.2.2/lib/active_record/log_subscriber.rb:98
  Ahoy::Visit Create (9.0ms)  INSERT INTO "ahoy_visits" ("visit_token", "visitor_token", "user_id", "ip", "user_agent", "referrer", "referring_domain", "landing_page", "browser", "os", "device_type", "started_at") VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) RETURNING "id"  [["visit_token", "fb09791e-c1a1-4fbf-8ef2-1f97d4690d74"], ["visitor_token", "f460dc00-5027-4b60-8c17-5550bbc8905a"], ["user_id", 1], ["ip", "127.0.0.1"], ["user_agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36"], ["referrer", "http://0.0.0.0:3000/search?utf8=✓amp;title=amp;content=ods"], ["referring_domain", "0.0.0.0"], ["landing_page", "http://0.0.0.0:3000/search?utf8=✓amp;title=amp;content=ods"], ["browser", "Chrome"], ["os", "Mac"], ["device_type", "Desktop"], ["started_at", "2019-03-03 21:10:57.981414"]]
  ↳ /Users/adenhandasyde/.rvm/gems/ruby-2.4.0/gems/activerecord-5.2.2/lib/active_record/log_subscriber.rb:98
   (2.2ms)  COMMIT
  ↳ /Users/adenhandasyde/.rvm/gems/ruby-2.4.0/gems/activerecord-5.2.2/lib/active_record/log_subscriber.rb:98
[ActiveJob] [Ahoy::GeocodeV2Job] [92751e46-31db-4118-93b4-d3a8f54e8df7] Performing Ahoy::GeocodeV2Job (Job ID: 92751e46-31db-4118-93b4-d3a8f54e8df7) from Async(ahoy) with arguments: "fb09791e-c1a1-4fbf-8ef2-1f97d4690d74", "127.0.0.1"
[ActiveJob] Enqueued Ahoy::GeocodeV2Job (Job ID: 92751e46-31db-4118-93b4-d3a8f54e8df7) to Async(ahoy) with arguments: "fb09791e-c1a1-4fbf-8ef2-1f97d4690d74", "127.0.0.1"
[ActiveJob] [Ahoy::GeocodeV2Job] [92751e46-31db-4118-93b4-d3a8f54e8df7] Performed Ahoy::GeocodeV2Job (Job ID: 92751e46-31db-4118-93b4-d3a8f54e8df7) from Async(ahoy) in 5.7ms
  Rendering search/index.html.erb within layouts/application
  Post Load (0.6ms)  SELECT "posts".* FROM "posts" WHERE (content LIKE '%ods%' AND title LIKE '%%')
  ↳ app/views/search/index.html.erb:11
  Rendered search/index.html.erb within layouts/application (10.5ms)
   (0.2ms)  BEGIN
  ↳ app/controllers/application_controller.rb:41
  Ahoy::Event Create (6.9ms)  INSERT INTO "ahoy_events" ("visit_id", "user_id", "name", "properties", "time") VALUES ($1, $2, $3, $4, $5) RETURNING "id"  [["visit_id", 2], ["user_id", 1], ["name", "Ran Action"], ["properties", "{"controller":"search","action":"index"}"], ["time", "2019-03-03 21:10:58.343325"]]
  ↳ app/controllers/application_controller.rb:41
   (0.3ms)  COMMIT
  ↳ app/controllers/application_controller.rb:41
Completed 200 OK in 407ms (Views: 217.5ms | ActiveRecord: 33.9ms)
  

К сожалению, это работает, отображение было на 800 пикселей ниже по странице, и я пропустил это.

Комментарии:

1. Не могли бы вы, пожалуйста, добавить журнал сервера к вопросу?

2. @Vasilisa, Обновлено.

3. Глядя на SELECT "posts".* FROM "posts" WHERE (content LIKE '%ods%' AND title LIKE '%%') строку, он работает хорошо. Возвращает ли он неправильные сообщения? Или как это должно работать другими словами?

4. Я попробовал это с «ods» и «как» с парой и без нее, для ods и how в содержимом и заголовке сообщения, и ни один из них ничего не дал…

5. И у вас действительно есть сообщения с «ods» в заголовке и «как» в содержании? И это не «Ods» или «Как» в самом сообщении (первая буква увеличена)? Какую базу данных вы используете? Я так много спрашиваю, потому что ваш код контроллера должен работать.