Rails: форма поиска в навигационной панели boostrap

#ruby-on-rails #twitter-bootstrap

#ruby-on-rails #twitter-bootstrap

Вопрос:

Я пытаюсь добавить форму поиска в панель навигации bootstrap, но безуспешно. Форма поиска отлично работает в app /views / searches/new.html.erb. Когда я добавляю ту же форму поиска в app/ views/ layouts/_header.html.erb, я все время получаю «Первый аргумент в форме не может содержать nil или быть пустым». Я попытался изменить @search в форме на поиск путей, но ни один из них не работает должным образом. Я был бы признателен за любые советы, как улучшить код, я чувствую, что мог бы написать код в модели поиска более элегантным способом. Спасибо за помощь.

приложение / просмотры / макеты/_header.html.erb

 <%= form_for @search, html: {class: "navbar-form navbar-left"} do |f| %>
 <div class="input-group searchbar">
 <%= f.text_field :keywords, class: "form-control", placeholder: "Search" %>
   <span class="input-group-addon">
   <%= button_tag(:class => "white") do %>
    <i class="glyphicon glyphicon-search"></i>
   <% end %>
   </span>
  </div>
<% end %>
  

модель поиска

 def questions
 @questions = find_questions
end

def answers
 @answers =  find_answers
end

def users
 @users = find_users
end

private

def find_questions
 questions = Question.order(created_at: :desc)
 questions = questions.where("title like ? OR content like?", "%#{keywords}%", "%#{keywords}%") if keywords.present?
 questions
end

def find_answers
 answers = Answer.order(created_at: :desc)
 answers = answers.where("content like ?", "%#{keywords}%") if keywords.present?
 answers
end

def find_users
 users = User.order(:username)
 users = users.where("username like ?", "%#{keywords}%") if keywords.present?
 users
end
  

ищет контроллер

 def new
 @search = Search.new
end

def create
 @search = Search.create!(allowed_params)
 redirect_to @search
end

def show
 @search = Search.find(params[:id])
end

private

def allowed_params
 params.require(:search).permit!
end
  

контроллер вопросов — у меня тот же код в ответах и контроллерах пользователей

 def index
 @questions = Question.all
 if params[:search]
  @questions = Question.search(params[:search])
 end
end
  

маршруты

 searches GET      /searches(.:format)                       searches#index
         POST     /searches(.:format)                       searches#create
new_search GET    /searches/new(.:format)                   searches#new
edit_search GET   /searches/:id/edit(.:format)              searches#edit
search GET      /searches/:id(.:format)                   searches#show
       PATCH    /searches/:id(.:format)                   searches#update
       PUT      /searches/:id(.:format)                   searches#update
       DELETE   /searches/:id(.:format)                   searches#destroy
root GET      /                                         home#index
  

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

1. когда вы получаете эту ошибку, после нажатия или до?

2. @7urkm3n Я получаю это, когда пытаюсь открыть свой веб-сайт, я имею в виду, что первое, что я вижу, когда открываю localhost, это ошибка

Ответ №1:

Я не тестировал, но это должно сработать. Не забудьте перейти search_path на свою собственную.

 <%= form_tag ###search_path, method: :get do %>
    <%= text_field_tag 'keywords', nil, placeholder: "Search", class: "form-control" %>
   <%= submit_tag 'Search', name: nil %>
<% end %>
  

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

1. Большое спасибо за вашу помощь!