#ruby-on-rails #ruby #postgresql
#ruby-on-rails #ruby #postgresql
Вопрос:
Я использую PostgreSQL. У меня есть следующая форма по /main
URL (localhost:3000 / main):
=form_for(@car) do |b|
.col-xs-2= b.text_field(:type, class: "form-control", placeholder: "Type")
= b.submit('Buy', class: "btn btn-default")
В моем контроллере:
def main
@car = Car.new
end
def new
@car = Car.new
end
def create
@car = Car.new(car_params)
respond_to do |format|
if @car.save
format.html { redirect_to @car, notice: 'Car was successfully ordered.' }
format.json { render :show, status: :created, location: @car }
else
format.html { render :new }
format.json { render json: @car, status: :unprocessable_entity }
end
end
завершение
где
def car_params
params.require(:car).permit(:type)
end
Я проверил свой код 100 раз, и, кажется, все в порядке, но я не могу добавить новую запись в свою таблицу базы данных. Кто-нибудь может мне помочь, почему это происходит? В чем проблема в моем коде?
Комментарии:
1. И вот мы снова. Не меняйте свой вопрос 20 раз. Вы аннулируете ответы. Опубликуйте свой фактический код с самого начала, в первой редакции.
2. @SergioTulentsev вы правы! Извините за это! Вот как теперь выглядит мой код!
3. Можете ли вы проверить, есть ли какие-либо проверки, применяемые в модели? Вы можете распечатать @car.errors в блоке else, чтобы проверить это
4. покажите свою модель
5. @Doe: ну, вам нужно изучить несколько простых приемов отладки. Попадает ли элемент управления в действие создания? Каковы параметры? Каков результат
@car.save
? Это этоfalse
, что такое@car.errors
? и так далее, и тому подобное.
Ответ №1:
Вы забыли сохранить машину. Несмотря на то, что вы объявили и установили объект, вы забыли сохранить его в базе данных.
Вы должны сделать это, добавив следующую строку:
@car.save
в действии создания
Комментарии:
1. ах, нет, извините. Это моя ошибка при заполнении кода внутри вопроса. Итак, у меня есть метод сохранения в моем коде. Я обновил свой вопрос
Ответ №2:
В вашем методе create отсутствует несколько вещей. Необходимо добавить «.new», где устанавливается переменная car, а затем также «.save», где находится оператор if, я считаю, что это должно сделать.
Метод создания должен быть таким, как показано ниже
def create
@car = Car.new(car_params)
respond_to do |format|
if @car.save
format.html { redirect_to @car, notice: 'Car was successfully ordered.' }
format.json { render :show, status: :created, location: @car }
else
format.html { render :new }
format.json { render json: @car, status: :unprocessable_entity }
end
end
Комментарии:
1. ах, нет, извините. Это моя ошибка при заполнении кода внутри вопроса. Итак, у меня есть «новый» метод в моем коде. Я обновил свой вопрос
Ответ №3:
@car = Car(car_params)
неверно. Вам нужно сделать @car = Car.new(car_params)
Комментарии:
1. ах, нет, извините. Это моя ошибка при заполнении кода внутри вопроса. Итак, у меня есть «новый» метод в моем коде. Я обновил свой вопрос. Извините за это!
Ответ №4:
Первое, что вам нужно сделать, это заменить эту строку в вашем методе create .
@car = Car(car_params)
с помощью этой строки
@car = Car.new(car_params)
Потому что нам нужно инициализировать запись car с разрешенными параметрами. После этого вам нужно вызвать @car.save
, который вернет логическое значение.
Таким образом, вы можете проверить это, если условие, например
if @car.save
Надеюсь, это решит вашу проблему.
Комментарии:
1. ах, нет, извините. Это моя ошибка при заполнении кода внутри вопроса. Итак, у меня есть «новый» метод в моем коде. Я обновил свой вопрос. Извините за это!
2. Можете ли вы проверить, есть ли какие-либо проверки, применяемые в модели?
3. Вы можете распечатать @car.errors в блоке else, чтобы проверить это.