HTTP 更改变量并重新加载 Sinatra
HTTP Change variable and reload Sinatra
我正在使用 Sinatra,a Hackernews API 我一直在为分页而苦苦挣扎,这个 API 没有使用查询参数
因此,对于站点的信息(第 1 页),端点将是这个
https://api.hnpwa.com/v0/news/1.json and for page #2 is this one 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
。但这说明了如何使用参数。
我正在使用 Sinatra,a Hackernews API 我一直在为分页而苦苦挣扎,这个 API 没有使用查询参数
因此,对于站点的信息(第 1 页),端点将是这个 https://api.hnpwa.com/v0/news/1.json and for page #2 is this one 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
。但这说明了如何使用参数。