Rails перестал сохранять данные с сервера после преобразования моей базы данных из sqlite3 в postgresql. Что случилось? - PullRequest
0 голосов
/ 26 октября 2019

Итак, во-первых, я новичок здесь, чтобы переполнить стек и работать с рельсами в целом. У меня есть приложение, над которым я работаю некоторое время. Это простое приложение для регистрации тренировок. У меня все работало нормально при подключении к sqlite3, но после настройки postgresql у меня возникли проблемы. При использовании консоли rails все работает нормально, но когда я пытаюсь создать тренировку из графического интерфейса на сервере, она не сохраняется, и я не получаю никаких ошибок. Что может быть причиной этого? Я предполагаю, что это что-то простое, так как есть много чего я не понимаю и не получаю никаких прямых ошибок. Поэтому, если мне нужно запустить сервер postgres с сервером rails или что-то в этом роде, я не уверен и не знаю как. Я опубликую весь код, который я считаю уместным, но, пожалуйста, дайте мне знать, если вам нужно что-то еще увидеть.

Я попытался немного изменить контроллер, чтобы более близко имитировать то, над чем работалконсоль, но это ничего не сделало. Я также попытался заглянуть в postgres больше, чтобы увидеть, что я что-то там упустил, но я настолько новичок в его использовании, что не до конца понимал все, что я читал. Да, и я могу создать нового пользователя и работать с ним, но это тоже не спасает. Таким образом, я предполагаю, что пользователю может потребоваться сначала сохранить данные, но я подумал, что это приведет к ошибке перед отправкой и загрузкой формы вообще.

Форма с проблемами:

<div class="container-fluid">
  <%= form_with(model: @workout, local: true) do |form| %>
    <% if @workout.errors.any? %>
      <div id="error_explanation">
        <h2><%= pluralize(@workout.errors.count, "error") %> prohibited this workout from being saved:</h2>

        <ul>
          <% @workout.errors.full_messages.each do |message| %>
            <li><%= message %></li>
          <% end %>
        </ul>
      </div>
    <% end %>

    <div class="container-fluid align-items-center">
      <form>
        <div class="container-fluid">
          <%= form_for @workout do |f| %>
            <div class="form-group">
              <h2><%= f.label :date %></h2>
              <div style="font-size: 18pt"><%= f.date_field :date %></div>
            </div>
          <% end %>
        </div>

        <div class="container-fluid">
          <div data-controller="nested-form">
            <br><br>
            <h2>Exercises</h2>
            <template data-target="nested-form.template">
              <%= form.fields_for :exercises, Exercise.new, child_index: 'TEMPLATE_RECORD' do |exercise| %>
                <%= render 'exercise_fields', form: exercise %>
              <% end %>
            </template>

            <%= form.fields_for :exercises do |exercise| %>
              <%= render 'exercise_fields', form: exercise %>
            <% end %>

            <div data-target="nested-form.add_exercise">
              <br>
              <%= link_to "Add Exercise", "#", data: { action: "nested-form#add_association" } %>
            </div>
          </div>
        </div>

        <br><br>

        <div class="actions" >
          <%= form.submit %>
        </div>
      </form>
    </div>
  <% end %>
</div>

Контроллер тренировок:

# frozen_string_literal: true

class WorkoutsController < ApplicationController
  before_action :require_login

  def index
    @workouts = current_user.workouts.order(:date)
    @workouts_by_date = @workouts.group_by(&:date)
    @date = params[:date] ? Date.parse(params[:date]) : Date.today
  end

  def show
    @workout = current_user.workouts.find(params[:id])
    @formatted_workout_date =
      "#{current_user.workouts.find(params[:id]).date.strftime('%B')}, #{current_user.workouts.find(params[:id]).date.day}, #{current_user.workouts.find(params[:id]).date.year}"
  end

  def new
    @workout = current_user.workouts.build
  end

  def create
    @workout = current_user.workouts.build(workout_params)

    if @workout.save
      redirect_to workout_path(@workout), notice: 'Workout Created'
    else
      @errors = @workout.errors.full_messages
      render :new
    end
  end

  def edit
    @workout = current_user.workouts.find(params[:id])
  end

  def update
    @workout = current_user.workouts.find(params[:id])

    if @workout.update_attributes(workout_params)
      redirect_to workout_path(@workout), notice: 'Workout Updated'
    else
      @errors = @workout.errors.full_messages
      render :edit
    end
  end

  def destroy
    workout = current_user.workouts.find(params[:id])
    workout.destroy
    redirect_to workouts_path, notice: "Deleted Workout On: #{workout.date}"
  end

  private

  def workout_params
    params.require(:workout).permit(:date, exercises_attributes: %i[_destroy id name reps weight weight_unit hours minutes seconds])
  end
end

database.yml

default: &default
  adapter: postgresql
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000
  username: User
  password: 'Password'

development:
  <<: *default
  database: logfit_development

test:
  <<: *default
  database: logfit_test

production:
  <<: *default
  database: logfit_production

Таким образом, это должно дать сообщение о том, что тренировка была создана, и вернуть пользователя назад, чтобы увидеть все тренировки. Но поскольку она не сохраняется, кнопка не вызывает ничего, кроме перезагрузки текущей страницы.

Редактировать:

Started GET "/workouts/new" for 127.0.0.1 at 2019-10-26 13:37:18 -0400
Processing by WorkoutsController#new as HTML
  User Load (0.2ms)  SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2  [["id", 1], ["LIMIT", 1]]
  ↳ app/controllers/application_controller.rb:4:in `current_user'
  Rendering workouts/new.html.erb within layouts/application
  Rendered workouts/_exercise_fields.html.erb (Duration: 0.8ms | Allocations: 804)
  Rendered workouts/_form.html.erb (Duration: 2.7ms | Allocations: 2347)
  Rendered workouts/new.html.erb within layouts/application (Duration: 3.1ms | Allocations: 2674)
Completed 200 OK in 9ms (Views: 7.4ms | ActiveRecord: 0.2ms | Allocations: 9703)


Started GET "/workouts/new?authenticity_token=9B6QKtFlbqLrc4gqZESapHMqwYXYAf90QRh1JKdJCMn2VrYtLnc0nIr7PtW%2Fynzgi693asncRdGMcNzadyFtXw%3D%3D&authenticity_token=fhYjp6TqckMewKqh93QrW06Qwuu39JdSwfIvYp3EQtZ8XgWgW%2FgofX9IHF4s%2Bs0fthV0BKYpLfcMmoacTawnQA%3D%3D&workout%5Bdate%5D=2019-10-26&workout%5Bexercises_attributes%5D%5B4%5D%5Bdestroy%5D=%23%3CExercise%3A0x00007fefb09e5190%3E&workout%5Bexercises_attributes%5D%5B4%5D%5Bname%5D=Bench+Press&workout%5Bexercises_attributes%5D%5B4%5D%5Breps%5D=10%2C8%2C6&workout%5Bexercises_attributes%5D%5B4%5D%5Bweight%5D=180&workout%5Bexercises_attributes%5D%5B4%5D%5Bweight_unit%5D=lbs&workout%5Bexercises_attributes%5D%5B4%5D%5Bhours%5D=&workout%5Bexercises_attributes%5D%5B4%5D%5Bminutes%5D=&workout%5Bexercises_attributes%5D%5B4%5D%5Bseconds%5D=&commit=Create+Workout" for 127.0.0.1 at 2019-10-26 13:38:01 -0400
Processing by WorkoutsController#new as HTML
  Parameters: {"authenticity_token"=>"fhYjp6TqckMewKqh93QrW06Qwuu39JdSwfIvYp3EQtZ8XgWgW/gofX9IHF4s+s0fthV0BKYpLfcMmoacTawnQA==", "workout"=>{"date"=>"2019-10-26", "exercises_attributes"=>{"4"=>{"destroy"=>"#<Exercise:0x00007fefb09e5190>", "name"=>"Bench Press", "reps"=>"10,8,6", "weight"=>"180", "weight_unit"=>"lbs", "hours"=>"", "minutes"=>"", "seconds"=>""}}}, "commit"=>"Create Workout"}
  User Load (0.3ms)  SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2  [["id", 1], ["LIMIT", 1]]
  ↳ app/controllers/application_controller.rb:4:in `current_user'
  Rendering workouts/new.html.erb within layouts/application
  Rendered workouts/_exercise_fields.html.erb (Duration: 0.7ms | Allocations: 524)
  Rendered workouts/_form.html.erb (Duration: 2.1ms | Allocations: 1395)
  Rendered workouts/new.html.erb within layouts/application (Duration: 2.3ms | Allocations: 1471)
Completed 200 OK in 17ms (Views: 14.5ms | ActiveRecord: 0.3ms | Allocations: 8360)

Из консоли Firefox:

Ошибка карты источника: ошибка: Неправильный адрес: . URL ресурса: blob: http://localhost:3000/1d84fedc-f8f0-438b-bece-8a0da876bfe5 URL карты источника: данные: application / json; base64,…

...