Как можно обновить мои очищенные данные, не обновляя все значения, а только те, которые были обновлены (например, криптовалюта) - PullRequest
0 голосов
/ 30 января 2019

Я собираю приложение Rails для сбора и показа последних курсов валют.

У меня есть два представления:

  • index.html.erb:Показывает с помощью «collection_select» все страны, которые были выбраны, и кнопку для поиска страны курса.

  • show.html.erb: Показывает рейтинг выбранной страны.

В моей таблице 3 столбца:

  1. Short (т. Е. USD)
  2. Страна (т. Е. Соединенные Штаты)
  3. Тариф (т. Е. 1,234)

В представлении просмотра есть кнопка для возврата к индексу для нового исследования (с обновленными показателями -> с тем же соскобом)

Я хочу обновитьтолько очищенные обновленные значения, (НЕ, если они не обновлены)

Это мой первый пост, надеюсь, это достаточно ясно ..!Заранее спасибо

Мой контроллер:

class CurrenciesController < ApplicationController

  def index
    Scraper.new.save
    @currency = Currency.new
  end

  def show
    @currency = Currency.find(params[:currency][:id])
    Currency.destroy_all
  end

  def update
  end

end

Мой скребок:

class Scraper

require 'nokogiri'
require 'open-uri'

  def initialize
    @array = []
    url = Nokogiri::HTML(open("https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/index.en.html"))
      url.css('tbody>tr').each do |row|
        hash = {}
        hash['Short'] = row.css('.currency').text
        hash['Country'] = row.css('.alignLeft').text.split(/ |\_|\-/).map(&:capitalize).join(" ")
        hash['Rate'] = row.css('.rate').text
        @array << hash
      end
    @array
  end


  def save
    @array.each do |currency|
      Currency.create(short: currency["Short"], country: currency["Country"], rate: currency["Rate"])
    end
  end

end

Моя схема:

ActiveRecord::Schema.define(version: 2019_01_29_113433) do

  # These are extensions that must be enabled in order to support this database
  enable_extension "plpgsql"

  create_table "currencies", force: :cascade do |t|
    t.string "short"
    t.string "country"
    t.float "rate"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

end

Мой индекс:

<h1>Euro Foreign Exchange Reference Rates</h1>
<br>
<div class="text-center">
  <%= form_for @currency, url: show_path do |c| %>
  <p>Choose your Foreign Exchange Reference</p><br>
  <%= c.collection_select :id, Currency.order(:country),:id,:country, {include_blank: false} %>
  <br><br><br>
  <%= c.submit "Search", ({:class => 'btn btn-light btn-sm'}) %>
  <% end %>
</div>

Мое шоу

<div class="text-center">

  <h2>
    <%= @currency.country %>
  </h2>
  <br>
  <p>1€ =
    <%= @currency.rate %>
    <%= @currency.short %>
  </p>
  <p class="time"> <%= @currency.created_at.strftime("Updated on %d/%m/%Y at %k:%M UTC")%></p>

  <h3>
    <a href="https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/eurofxref-graph-<%= @currency.short.downcase %>.en.html" target="_blank">-->
      <%= @currency.country %>
      Exchange Reference Rate
      <-- <b </a> </h3> <br>
        <p><%= link_to "New Research with updated rates", root_path, :class => 'btn btn-light' %></p>

</div>
...