Кажется, моя кнопка отправки не работает. В чем может быть проблема? - PullRequest
2 голосов
/ 26 января 2020

Он не показывает ошибок, чтобы помочь в поиске и устранении проблемы. Я проверил файл базы данных, и он все еще пуст.

Кнопка отправки <div><%= f.submit "Create", class: "btn btn-normal" %></div>

Единственное, что изменяется после отправки, - это адрес. Он изменяется от http://localhost:3000/cars/new до http://localhost:3000/cars

Все остальное остается прежним. Как это исправить?

Обновлен вопрос со следующим:

Журнал

    Started GET "/cars/new" for ::1 at 2020-01-26 14:44:53 +0000
   (0.1ms)  SELECT sqlite_version(*)
Processing by CarsController#new as HTML
  User Load (1.0ms)  SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ?  [["id", 1], ["LIMIT", 1]]
  Rendering cars/new.html.erb within layouts/application
  Rendered cars/new.html.erb within layouts/application (Duration: 12.1ms | Allocations: 1210)
[Webpacker] Everything's up-to-date. Nothing to do
  Rendered shared/_navbar.html.erb (Duration: 0.7ms | Allocations: 103)
  Rendered shared/_message.html.erb (Duration: 0.1ms | Allocations: 17)
Completed 200 OK in 496ms (Views: 471.7ms | ActiveRecord: 1.0ms | Allocations: 15750)


Started POST "/cars" for ::1 at 2020-01-26 14:45:06 +0000
Processing by CarsController#create as HTML
  Parameters: {"authenticity_token"=>"Oom+xdVDc0PqSwLbLIEP0R8H6U38+v9ISVql4Fr/0WSxZGSrxzTHccsgghd1U30OugcUBAA1R4BtsB0YigAUtA==", "car"=>{"vehicle_type"=>"Sports", "car_type"=>"Private", "seat"=>"5", "colour_type"=>"Black", "transmission_type"=>"Automatic"}, "commit"=>"Create car"}
  User Load (0.4ms)  SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ?  [["id", 1], ["LIMIT", 1]]
  Rendering cars/new.html.erb within layouts/application
  Rendered cars/new.html.erb within layouts/application (Duration: 7.2ms | Allocations: 1144)
[Webpacker] Everything's up-to-date. Nothing to do
  Rendered shared/_navbar.html.erb (Duration: 0.2ms | Allocations: 103)
  Rendered shared/_message.html.erb (Duration: 0.1ms | Allocations: 17)
Completed 200 OK in 124ms (Views: 114.9ms | ActiveRecord: 0.4ms | Allocations: 14757)

Модель app/models/car.rb

class Car < ApplicationRecord
  belongs_to :user

  validates :vehicle_type, presence: true
  validates :car_type, presence: true
  validates :seat, presence: true
  validates :transmission_type, presence: true
  validates :engine, presence: true
end

Контроллер app/controllers/cars_controller.rb

class CarsController < ApplicationController
  before_action :set_car, except: [:index, :new, :create]
  before_action :authenticate_user!, except: [:show]

  def index
    @cars = current_user.cars
  end

  def new
    @car = current_user.cars.build
  end

  def create
    @car = current_user.cars.build(car_params)
    if @car.save
      redirect_to listing_car_path(@car), notice: "Saved..."
    else
      render :new, notice: "Something went wrong..."
    end
  end

  def show
  end

  def listing
  end

  def pricing
  end

  def description
  end

  def photo_upload
  end

  def features
  end

  def location
  end

  def update
    if @car.update(car_params)
      flash[:notice] = "Saved..."
    else
      flash[:notice] = "Something went wrong..."
    end
    redirect_back(fallback_location: request.referer)
  end

  private
    def set_car
      @car = Car.find(params[:id])
    end

    def car_params
      params.require(:car).permit(:vehicle_type, :car_type, :seat, :transmission_type, :engine, :fuel_type, :colour_type, :window_type, :listing_name, :summary, :is_tv, :is_air, :is_internet, :is_sunroof, :is_bluetooth, :is_dvd, :is_gps, :is_usb, :is_audio, :is_airbags, :price, :active)
    end
end

Ответы [ 2 ]

1 голос
/ 26 января 2020

TLDR:

Решение заключается в том, что вы должны либо указать engine и user_id в параметрах, либо удалить истинную проверку присутствия и добавить необязательный истинный случай (для ассоциации пользователей) из модель.

Объяснение:

Если ваша модель говорит, что она должна проверять наличие engine, то как вы можете не предоставить параметр двигателя (в форме) , Когда вы публикуете форму без движка, происходит то, что ваша модель не сохраняет ее, и, как вы обработали этот случай, она движется дальше. Поскольку он принадлежит пользователю, то же самое относится и к идентификатору пользователя. хотя вы также можете сделать его необязательным, добавив необязательный: true как в схеме, так и в модели (поскольку автомобиль может «быть» без IRL пользователя, но зависит здесь в вашем случае использования).

Если сделать еще один шаг вперед, Чтобы точно понять проблему, используйте pry или byebug, чтобы увидеть параметры и события во время выполнения. Более простой и быстрый способ проверки ошибки заключается в том, что перед методом create ставится метка, и она будет отображать ошибку вроде: if @car.save!. Еще одна вещь: скопируйте параметры автомобиля и попытайтесь сделать это вручную на консоли рельсов с треском. Это даст вам причину. Эти вещи помогут вам диагностировать проблемы сохранения / создания моделей в рельсах.

Happy Coding:)

0 голосов
/ 26 января 2020

Из вашего файла журнала

Started POST "/cars" for ::1 at 2020-01-26 14:45:06 +0000

Показывает, что на контроллере автомобилей вызывается действие создания. Передаются следующие параметры:

{"authenticity_token"=>"Oom+xdVDc0PqSwLbLIEP0R8H6U38+v9ISVql4Fr/0WSxZGSrxzTHccsgghd1U30OugcUBAA1R4BtsB0YigAUtA==", "car"=>{"vehicle_type"=>"Sports", "car_type"=>"Private", "seat"=>"5", "colour_type"=>"Black", "transmission_type"=>"Automatic"}, "commit"=>"Create car"}

Первый метод, который вызывается при создании действие authenticate_user

before_action :authenticate_user!, except: [:show]

Вы можете видеть, что это происходит

User Load (0.4ms)  SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT ?  [["id", 1], ["LIMIT", 1]]

Согласно вашему журналу, следующее, что происходит, это

Rendering cars/new.html.erb within layouts/application

Это означает, что Команда else была нажата render :new, notice: "Something went wrong..."

@car = current_user.cars.build(car_params)
if @car.save
  redirect_to listing_car_path(@car), notice: "Saved..."
else
  render :new, notice: "Something went wrong..."
end

Поэтому автомобиль не был сохранен, поэтому проверка должна была быть неудачной. Ваша новая форма автомобиля должна иметь ошибки l oop для отображения всех ошибок. Если бы он имел это, тогда ваш пользователь (Вы) знал бы, что пошло не так там все равно

...