HTTP更改变量并重新加载Sinatra
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP更改变量并重新加载Sinatra相关的知识,希望对你有一定的参考价值。
我正在与Sinatra一起工作,并且a Hackernews API我一直在为分页而苦苦挣扎,因为该API并未使用查询参数来做到这一点
因此,对于网站的信息(第1页),端点是https://api.hnpwa.com/v0/news/1.json,第2页是这个https://api.hnpwa.com/v0/news/2.json
我想从.erb文件发送参数以进行修改,但我一直无法做到
app.rb
helpers do
def get_page(site, page)
"https://api.hnpwa.com/v0/#{site}/#{page}.json"
end
end
get '/' do
@page = 1
endpoint = get_page("news", @page)
@stories = JSON.parse(HTTP.get(endpoint).to_s)
erb :news
end
news.erb
<table>
<tbody>
<% @stories.each_with_index do |story, index| %>
<tr>
<td class="post">
<div>
<a class="index" href="#"><%= index + 1 %>.</a>
<a href="<%= story['url'] %>" class="post-title"><%= story['title'] %></a>
<span><a class="url" href="<%= story['url'] %>">(<span><%= story['url'].nil? ? '' : story['url'].split('/')[2] %></span>)</a></span>
</div>
<div class="post-details">
<p><%= story['points'] %> points by <%= story['user'] %></p>
<p><%= time_since_in_words(story['time']) %> ago</p>
<p>| hide |</p>
<p><%= story['comments_count'] %> comments</p>
</div>
</td>
</tr>
<%end%>
</tbody>
</table>
<a class="more" href=<% @page+=1%>>More</p>
我真的是Sinatra和Ruby的新手,所以我不知道还有什么可做的。感谢帮助,谢谢!
答案
您缺少的部分是您的动作需要接收某种参数。
当前您始终显示第一页:
get '/' do
@page = 1
因此,在路径中,您必须以某种方式与操作传达您想要显示的页面。为此,请使用参数。您可以通过两种方式执行此操作:
具有查询参数
get '/' do
# href should be something like "/?page=2"
# set the page according to parameters or default to
@page = params['page'] || 1
…
end
带路径参数
get '/:page' do
# href should be something like "/2"
@page = params['page']
...
end
路径参数不是可选的,因此它不适用于您的用例,因为您将需要两条路由,一条用于/
,另一条用于/:page
。但这说明了如何使用参数。
以上是关于HTTP更改变量并重新加载Sinatra的主要内容,如果未能解决你的问题,请参考以下文章