как сохранить ответы формы в файле JSON в ruby? - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь сохранить ответы, отправленные в моей форме / опросе, в файл JSON.В настоящее время мой файл JSON возвращает ноль.У меня проблемы с выяснением того, как сохранить ответы в моей форме в файл JSON.

survey.rb

require 'json'       

class Survey
  attr_reader :nationality, :employed, :income, :email

  def initialize(args={})
    @nationality = args["nationality"]
    @employed = args["employed"]
    @income = args ["income"]
    @email =args ["email"]
  end


    def save
      json = {
        email: @email,
        nationality: @nationality,
        employed: @employed,
        income: @income
      }.to_json

      open('answers.json', 'a') do |file|
        file.puts json
      end
    end

end

app.rb

require 'rack'
require_relative 'route'
require_relative 'template'
require_relative 'admin'
require_relative 'survey'


class App

  def call(env)
    response_headers = {}

    request_cookies = Rack::Utils.parse_cookies(env)
    route = Route.new(env)
    status = route.name =~ /^\d\d\d$/ ? route.name.to_i : 200
    template = Template.new(route.name, visit_count: request_cookies["session_count"].to_i+1)

    [status, response_headers, [template.render]]

  end



  survey = Survey.new ''  
  survey
  survey.save

end

admin.rb

require 'sinatra/base'
require 'rack'
require 'erb'
require_relative 'route'

class Admin < Sinatra::Base






  use Rack::Auth::Basic, "Protected Area" do |username, password|
    username == 'minhaj' && password == 'minhaj'
  end

  get '/'  do
    "<div>hi for some reason I don't need to put this in a string #{5+5}</div>
        <p>
        </div>hello</div>
        </p>

    "
  end

end

route.rb

class Route
  ROUTES = {
    "GET" => {
      "/"  => :home,
      "/admin"  => :admin,
      "/authentication" => :authentication,
    },
    "POST" => {
      "/check" => :check
    }
  }

  attr_accessor :name

  def initialize(env)
    path = env["PATH_INFO"]
    http_method = env["REQUEST_METHOD"]
    @name = (ROUTES[http_method] && ROUTES[http_method][path]) || :not_found
  end
end

config.ru

#! usr/bin/env ruby
require 'rack'
load 'admin.rb'
load 'visit_counter.rb'
load 'app.rb'




require File.expand_path '../admin.rb', __FILE__

use Rack::Static, :urls => ['/stylesheet/style.css'], :root => 'public'


run Admin.new
run App.new
use VisitCounter

run Rack::URLMap.new({ "/admin" => Admin.new, "/" => App.new })

Так выглядит и упоминалось ранее, когда я запускаю свойприложение, мой answers.json возвращает

{"email":null,"nationality":null,"employed":null,"income":null}

вместо того, чтобы возвращать значения, представленные на странице моей формы.

1 Ответ

0 голосов
/ 23 октября 2018

Возможно, вы могли бы попробовать следующее:

file = File.open(File.dirname(__FILE__) + '/answers.json', 'a+')
file.write json
file.write "\n"
file.close

Убедитесь, что json действительно заполняется в первую очередь, вы можете проверить это либо puts json, либо, если вы используете rubymine, выможно запустить в режиме отладки и прикрепить к нему точку останова.

Также нельзя просто разместить код в классе и ожидать его выполнения.

Move:

survey = Survey.new ''  
survey.save

в метод и вызвать его специально, или включить его в метод вызова.

Дайте мне знать, если он работает

...