HTTP Изменить переменную и перезагрузить Sinatra - PullRequest
1 голос
/ 06 мая 2020

Я работаю с Sinatra и API Hackernews Я боролся с разбивкой на страницы, этот 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 поэтому я понятия не имею, что еще делать. Помощь приветствуется, спасибо!

1 Ответ

0 голосов
/ 06 мая 2020

Вам не хватает того, что ваше действие должно получить какой-то параметр.

В настоящее время вы всегда показываете первую страницу:

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. Но это показывает, как можно использовать параметры.

...