#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. Большое спасибо за вашу помощь!