Javascript RubyonRails,新的API发布和刷新页面
我是RubyonRails新手。在我们的网站上,用户可以进行搜索,然后获得结果列表 现在我想添加查看排序结果(按价格、评级等)的功能。API进行排序,所以我所要做的就是使用新选项(即&sort=PRICE)向API发送一个新的post请求,然后它将按顺序返回结果 我的问题是我不知道怎么做,我已经尝试了Javascript RubyonRails,新的API发布和刷新页面,javascript,ruby-on-rails,ruby,ajax,web-development-server,Javascript,Ruby On Rails,Ruby,Ajax,Web Development Server,我是RubyonRails新手。在我们的网站上,用户可以进行搜索,然后获得结果列表 现在我想添加查看排序结果(按价格、评级等)的功能。API进行排序,所以我所要做的就是使用新选项(即&sort=PRICE)向API发送一个新的post请求,然后它将按顺序返回结果 我的问题是我不知道怎么做,我已经尝试了按钮标签和按钮标签,如果点击并手动刷新按钮标签,它会工作,但是如果我添加多个按钮标签它不会工作 我将$sort作为全局变量(在API文档中使用默认排序值,即no_sort),因此当按下按钮时,我尝试
按钮标签
和按钮标签
,如果点击并手动刷新按钮标签,它会工作,但是如果我添加多个按钮标签
它不会工作
我将$sort
作为全局变量(在API文档中使用默认排序值,即no_sort),因此当按下按钮时,我尝试将该变量更改为所需名称,然后发布,这就是我看到的:
<%= button_to 'price', :controller => 'database', :action => 'getList', :method => 'post' do %>
<% $sort="PRICE" %>
<% end %>
<%= button_to 'rating', :controller => 'database', :action => 'getList', :method => 'post' do %>
<% $sort="QUALITY" %>
<% end %>
<%= button_to 'distance', :controller => 'database', :action => 'getList', :method => 'post' do %>
<% $sort="PROXIMITY" %>
<% end %>
'database',:action=>'getList',:method=>'post'do%>
'数据库',:操作=>'获取列表',:方法=>'发布'执行%>
'数据库',:操作=>'获取列表',:方法=>'发布'执行%>
我的控制器:
def getList()
#search parameters
destinationString = params[:poi].gsub(' ', '+')
propertyName = params[:name].gsub(' ', '+')
stateProvinceCode = params[:state].gsub(' ', '+')
city = params[:city].gsub(' ', '+')
arrival = DateFormat(params[:start_date])
departure = DateFormat(params[:departure])
@arrivalDate = params[:start_date]
@departureDate = params[:departure]
#construct http request
request = $gAPI_url + "/list?" \
+ "cid=" + $gCid \
+ "&apiKey=" + $gApiKey \
+ "&sort=" + $sort \
+ "&numberOfResults=" + $gNumberOfResults \
+ "&destinationString=" + destinationString \
+ "&propertyName=" + propertyName \
+ "&stateProvinceCode=" + stateProvinceCode \
+ "&city=" + city \
+ "&arrivalDate=" + arrival \
+ "&departureDate=" + departure
response = JSON.parse(HTTParty.get(request).body)
puts request
# Check for EanWsError
if response["HotelListResponse"]["EanWsError"] then
hotelError = response["HotelListResponse"]["EanWsError"]
#Multiple possible destination error.
if hotelError["category"] == $gERROR_CATEGORY_DATA_VALIDATION then
#create list of suggested destinations
#We are not yet implementing the suggestions list functionality.
#@destinationList = []
#@destinationListSize = Integer(response["HotelListResponse"]["LocationInfos"]["@size"]) -1
#(0..(@destinationListSize)).each do |i|
#destinationInfo = response["HotelListResponse"]["LocationInfos"]["LocationInfo"][i]
#@destinationList << Destination.new(destinationInfo)
#end
redirect_to '/database/errorPage'
#No results were returned
elsif hotelError["category"] == $gERROR_CATEGORY_RESULT_NULL then
#TODO: Figure out what to do if no results were found.
# Currently sending them back to the homepage
redirect_to '/database/errorPage'
end
#We got a valid response. Parse the response and create a list of hotel objects
else
#Our hotelListSize is subtracted by 1 because we only want up to last index
@hotelList = []
@hotelListSize = Integer(response["HotelListResponse"]["HotelList"]["@size"]) -1
(0..(@hotelListSize)).each do |i|
hotelSummary = response["HotelListResponse"]["HotelList"]["HotelSummary"][i]
@hotelList << Hotel.new(hotelSummary)
@hotelList[i].thumbNailUrl = "http://images.travelnow.com" + response["HotelListResponse"]["HotelList"]["HotelSummary"][i]["thumbNailUrl"]
end
end
end
def getList()
#搜索参数
destinationString=params[:poi].gsub(“”,“+”)
propertyName=params[:name].gsub(“”,+“”)
stateProvinceCode=params[:state].gsub(“”,“+”)
city=params[:city].gsub(“,+”)
到达=日期格式(参数[:开始日期])
出发=日期格式(参数[:出发])
@arrivalDate=参数[:开始日期]
@出发日期=参数[:出发]
#构造http请求
请求=$gAPI_url+“/list?”\
+“cid=“+$gCid\
+“&apiKey=“+$gApiKey\
+“&sort=“+$sort\
+“&numberOfResults=“+$gNumberOfResults\
+“&destinationString=“+destinationString\
+“&propertyName=“+propertyName”\
+“&stateProvinceCode=“+stateProvinceCode”\
+“&city=“+city”\
+“&arrivalDate=“+arrival\
+“&departureDate=“+离开”
response=JSON.parse(HTTParty.get(request.body)
提出请求
#检查是否存在错误
如果响应[“HotelListResponse”][“EANWERROR”]则
HoteleError=响应[“HotelListResponse”][“EANWERROR”]
#多个可能的目标错误。
如果HoteleError[“category”]=$gERROR\u category\u DATA\u验证,则
#创建建议目的地的列表
#我们尚未实现建议列表功能。
#@目标列表=[]
#@destinationListSize=整数(响应[“HotelListResponse”][“LocationInfos”][“@size”])-1
#(0.(@destinationListSize))。每个都有|
#destinationInfo=响应[“HotelListResponse”][“LocationInfos”][“LocationInfo”][i]
#@目的论短篇
您有几个问题,但要解决主要问题,请尝试:
<%= button_to 'price', :controller => 'database', :action => 'getList', :method => 'post', :params => {:sort => 'PRICE'} %>
<%= button_to 'quality', :controller => 'database', :action => 'getList', :method => 'post', :params => {:sort => 'QUALITY'} %>
<%= button_to 'distance', :controller => 'database', :action => 'getList', :method => 'post', :params => {:sort => 'PROXIMITY'} %>
长部分
完成短部分工作后。谢谢您的回复。我试了你的建议,但还是没有结果,页面没有刷新,当我刷新手册时,我仍然得到与以前相同的结果。请在单击某个按钮时粘贴服务器输出。实际上,我有
包装这些按钮,这显然使它们无法工作。现在,我得到了此错误“未定义方法”gsub,用于nil:NilClass提取源代码(在第91行附近):$sort | |='CITY_VALUE'#默认排序destinationString=params[:poi].gsub('''+')propertyName=params[:name].gsub(''''+')stateProvinceCode=params[:state].gsub('''+')CITY=params[:CITY].gsub('''+'))
我不明白。当我点击按钮时,就会出现这个错误。我假设控制器中的排序声明或赋值有问题?
<%= button_to 'price', :controller => 'database', :action => 'getList', :method => 'post', :params => {:sort => 'PRICE'} %>
<%= button_to 'quality', :controller => 'database', :action => 'getList', :method => 'post', :params => {:sort => 'QUALITY'} %>
<%= button_to 'distance', :controller => 'database', :action => 'getList', :method => 'post', :params => {:sort => 'PROXIMITY'} %>
def getList()
$sort = ['PRICE', 'QUALITY', 'PROXIMITY'].find{|s| s == params[:sort]}
$sort ||= 'PRICE' # sort by price by default
# your code...