#ruby-on-rails
#ruby-on-rails
Вопрос:
Когда я пытаюсь вызвать свой ChocolateController:
@chocolate.kinds.new(name: "Bitter")
где
class ChocolateController < ApplicationController
def new
@chocolate = Chocolate.new
end
и где у меня в моих моделях:
class Chocolate < ActiveRecord::Base
has_many :kinds
class Kind < ActiveRecord::Base
belongs_to :chocolate
Я получаю следующую ошибку:
undefined method `new' for nil:NilClass
Кто-нибудь, пожалуйста, может мне помочь, почему я получаю эту ошибку? Если вам нужно больше кода, я могу его предоставить. Просто спросите меня об этом в комментариях
Комментарии:
1. как выглядит ваш
routes.rb
файл?2. @Отметить
resources :chocolates, only: [:new, :edit, :update, :create]
3. Я предполагаю, что у вас есть
belongs_to :chocolate
в вашей модели Kind?4. @henners66 да! Точно
5. странно — то, что у вас есть, должно работать, хотя стоило бы попробовать
@chocolate.kinds << Kind.new(name: bitter)
, чтобы увидеть, имеет ли это какое-либо значение.
Ответ №1:
Что вы могли бы сделать, это что-то вроде этого.
@chocolate.kinds.build(name: "Bitter")
Проблема в том, что @chocolate.kinds
при nil у @chocolate
нет записей типа and, поэтому вы не получаете Kind
модель обратно для вызова new. Даже если бы в нем были Kinds
записи, вы бы вызывали new в коллекции, а не в Kinds
модели.
Комментарии:
1. но я хочу сделать это правильным способом. Не совсем так. Нравится, как я пытаюсь
2. странно, но теперь он выдает мне
NoMethodError: undefined method
виды ‘для nil: NilClas`3. @CdotStrifeVII — даже если записей нет,
@chocolate.kinds
все равно следует назначить — в конце концов, это всего лишь массив, который будет пустым, если не будут назначены объекты Kind — здесь происходит что-то еще, из-за чего rails неправильно соблюдает отношение has_many4. хммм, да, здесь происходит что-то еще