Продолжаю отвечать на вопросы новичка из PHP, ниже может быть несколько вопросов, спасибо за ваше терпение.
Что я пытаюсь сделать:
У меня есть шаблон (view) с именем search.html.erb, где я хочу, чтобы в зависимости от ввода пользователя вызывались разные методы, в частности, переменные, передаваемые по ссылке на предыдущей странице. Например, если пользователь нажмет на ссылку «запятые», он передаст что-то вроде
search?type=commas
(Я заменил действие на тип, потому что я понимаю, что «действие» зарезервировано в Rails для методов, объявленных внутри контроллера). Файл маршрута имеет это:
match ':controller/:action/:type/'
Что должно позволить мне сделать "http://localhost:3000/actors/search/commas как способ передачи типа" запятые "?
Тогда страница поиска будет вызывать метод showCommas из модели актеров:
def self.showCommas
@commas = self.where("actor LIKE ?", "%,%,%")
end
Если бы они нажали на "острый", он бы прошел
search?type=acute
И эта страница будет вызывать острый метод в модели актеров.
Наконец, я также хочу, чтобы они могли передавать поисковый термин, и страница поиска выполняла бы SQL-запрос с этим термином, используя .find_by_sql.
Это просто реализовать в PHP, я просто использую
if ($_GET[action] == 'commas') { ...
Но как это сделать в Rails? Проблемы у меня:
Если я создаю метод в контроллере Actor для поискового запроса:
def search(term)
Actor.find_by_sql([sql query here with '%#{term}%'])
end
Rails будет жаловаться, что у меня слишком много аргументов для метода в контроллере. Итак, я переместил все свои методы в модель (догадываясь, что тогда это правильный путь?)
Поместив это на мою страницу search.html.erb:
if type.nil?
criteria = "No type specified"
elsif type == 'commas'
criteria = type
@actors = Actor.showCommas
end
Немедленно выдает ошибку о том, что переменная типа не определена: неопределенная локальная переменная или метод `type '
Итак, я сделал большой беспорядок, но, как ни крути Rails, исходя из PHP, довольно сложно обдумать способ работы Rails. Я понимаю основную философию наличия представления с тем же именем, что и ваше действие, и Rails будет его называть, но я не хочу создавать одну страницу для каждого запроса (или другой мелочи), которую мне нужно сделать. Кроме того, книги, которые я прочитал, похоже, не вдавались в подробности об этом, поэтому, опять же, спасибо за вашу помощь и поблажку задавать несколько вопросов в одном посте.