Pierwsza "aplikacja" - Prosty kalkulator

Cześć,
Na studiach dostałem za zadanie zrobić prosty kalkulator jedynie dodający dwie liczby po stronie serwera za pomocą RoR+AJAX. To moje pierwsze zderzenie z Rubym. Udało mi się napisać kawałek kodu ale niestety mam gdzieś błąd i nie potrafię go zlokalizować. Mogę liczyć na pomoc doświadczonych kolegów? Fragmenty kodu poniżej

routes.rb:

Rails.application.routes.draw do
  get 'calculators/new'
  get 'calculators/create'
  resources :calculators

  root to: 'calculators#new'
  # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
end

app\views\calculators\create.html.erb

document.getElementById("sum").innerHTML = <%= @sum %>

app\views\calculators\new.html.erb

<%= form_tag calculators_path, :method => :post, :remote => true do %>
  <%= text_field_tag :data, nil, :onkeyup => "this.form.sub.click()" %> = <span id="sum"></span>
  <%= submit_tag "ok", :name => "sub"%>
<% end %>

app\controllers\calculators_controller.rb

class CalculatorsController < ApplicationController
  def create
    @sum = eval(params[:data])
  end
end

Z góry dzięki!

Przydałby się jakiś konkretny komunikat błędu albo dogłębniejszy opis tego co nie działa. Jeśli masz taką możliwość to wystaw kod aplikacji, wtedy może ktoś zerknie na to.

Z innej beczki. Nawet jeśli to tylko ćwiczenie, użycie metody eval w ten sposób nie jest dobrą praktyką. Użytkownik może przesłać dowolny kod, który zostanie wykonany na serwerze.

1 Like

Plik projektu Dołączam pełny kod aplikacji.

Z tego co widzę w oknie przeglądarki internetowej w Network dostaje POSTem poprawny wynik ale niestety nie jest on wyświetlany na stronie (nie trafia do jej kodu)

Zmień plik create.html.erb na create.js.erb gdyż jego zawartość ma być interpretowana jako kawałek javascriptu a nie htmla. Wtedy wynik pokaże Ci się na ekranie.

1 Like

Działa, dziękuje bardzo. Nie wpadłbym na to bardzo długo bo wertowanie internetu nie pomagało :slight_smile: