【发布时间】:2019-01-22 23:33:28
【问题描述】:
我正在构建一个与外部搜索 API 交互的 Rails 应用。我有一个具有搜索功能的类方法,可以通过我的设计控制器中的索引方法访问。我怎样才能使我的表单搜索更改我的控制器方法的参数并因此执行搜索?我的代码如下。非常感谢您的帮助:)
类方法:
class Api
include HTTParty
base_uri "http://search.exampleapi.com"
attr_accessor :name
# Find a particular design, based on its name
def find(name)
self.class.get("/designs", query: { q: name }).parsed_response
end
end
控制器:
class DesignsController < ApplicationController
def index
@search = Api.new.find(params[:q])['results']
end
end
Routes.rb
Rails.application.routes.draw do
root 'designs#index'
resources :designs
end
查看:
<h1>Search</h1>
<%= form_tag(controller: "designs", action: "search", method: "get") do %>
<%= label_tag(:q, "Search for:") %>
<%= text_field_tag(:q) %>
<%= submit_tag("Search") %>
<% end %>
<h2>Search results:</h2>
<% @search.each do |design| %>
<h3><%= design['name'] %></h3>
<h5><%= design['thumbnail_url'] %></h5>
<% end %>
【问题讨论】:
-
你应该把
action: "search"改成action: "index" -
谢谢 :) 我在尝试搜索时收到了
No route matches [POST] "/"。 -
我要指出一些与问题半无关的事情——在 Rails 领域,我们将控制器方法称为“动作”而不是方法。至少是通过一些 HTTP 请求访问的那些,如索引、显示、创建等。这似乎是 kasperite 指出的问题的根源。私有方法仍将被称为方法。此外,您不太可能需要在 Rails 应用程序中使用
include HTTParty- 它应该已经为您完成了。
标签: ruby-on-rails ruby httparty