【发布时间】:2020-05-08 13:53:31
【问题描述】:
Ruby on Rails 的新手。在提交搜索参数后,我想更新 new.html.erb 视图以显示来自 album_controller.rb 的 search_result。我可以创建一个隐藏元素,然后通过控制器显示它吗? search_results 是一个字符串数组。
我的目标是显示可供选择的可能专辑列表(从 http get 请求中获得),然后让用户选择要继续使用哪个搜索结果。
new.html.erb
<h4>Search for Album</h4>
<%= form_with(url: "/albums/search", method: "get") do %>
<%= label_tag(:q, "Search for: ") %>
<%= text_field_tag(:q) %>
<%= submit_tag("Search") %>
<% end %>
album_controller.rb
require 'httparty'
require 'json'
class AlbumsController < ApplicationController
def new
puts "the new method was just called"
end
def search
puts "inside search method"
@search_param = params[:q]
puts @search_param
if params[:q] # if not null
#perform artist and album search
search_result = http_request(@search_param)
end
end
def http_request(search_input)
# search for album
website = "http://ws.audioscrobbler.com/2.0/?"
search_album = "method=album.search&album=" + search_input + "&"
api_key = "api_key=&"
format = "format=json&"
limit = "limit=15"
url = website + search_album + api_key + format + limit
response = HTTParty.get(url)
pretty_json = JSON.pretty_generate(response.parsed_response)
obj = JSON.parse(pretty_json)
returnArray = []
for result in obj["results"]["albummatches"]["album"]
tempArray = [result["name"], result["artist"], result["image"][3]["#text"]]
returnArray.append(tempArray)
end
return returnArray
end
end
routes.rb
Rails.application.routes.draw do
get 'welcome/index'
post "albums/new" #to later post to album db
get "albums/search" #search route in new.html.erb
resources :albums
root 'welcome#index'
end
【问题讨论】:
-
如果您想提交特定于专辑的搜索查询。为什么不像:
Album.where(title: "inquery_data") -
相册obj尚未创建。我想显示一个可供选择的可能专辑列表(从 http get 请求中获得),然后让用户选择要继续使用哪个搜索结果。
-
我不太明白这里的流程。您想给他们一个专辑列表以供选择,然后搜索该专辑选择导致的内容吗?似乎有点过于复杂。
-
对不起,如果我不具体,第一次发帖。我想在数据库中维护个人专辑收藏。流程是这样的:搜索专辑(通过音乐api),http get请求返回json,将json解析成15个搜索结果,将搜索结果显示给用户(我现在遇到问题的地方),最后让用户选择将哪个搜索结果添加到数据库中。
-
无法将该 json 放入视图中?
标签: html ruby-on-rails ruby