Я создаю нулевой объект?(неопределенный метод ___ для nil: NilClass) ошибка - ruby ​​на рельсах - PullRequest
1 голос
/ 05 октября 2010

Мои проверки работали некоторое время, или я так думал.Теперь я возвращаюсь к ним через некоторое время, делая что-то еще, и я получаю ошибку выше.Я думаю, это означает, что я создаю нулевой объект с помощью метода .new, но я просто потерян.Казалось, что это проблема с созданием нового объекта контроллером, потому что даже если я # проверяю проверку, следующая проверка в дереве с другим атрибутом @thing вызывает ту же ошибку.Однако, даже если я создаю объект в консоли и проверяю его там, метод .save все равно выдает ошибку - неопределенный метод 'user_id' для nil: NilClass

ThingsController:

def create
  @thing = Thing.new(params[:thing])
  @thing.user_id = @currentuser_id

  if @thing.save
    flash[:notice] = "Successfully created thing."
    redirect_to @thing
  else
    #flash[:notice] = "Your thing did not get created."
    render 'otherthings/show'      
  end
end

Thing.rb
  validate :user_valid
  def user_valid
    errors.add("you must be logged in to add a thing") unless @thing.user_id?
  end

Я немного рубинна рельсах noob (то есть <8 недель) и это мой первый вопрос stackoverflow, так что будьте осторожны со мной, если это глупо очевидно.Я тоже попробовал params ["thing"], так как это работало в консоли после ручного создания params для соответствия файлам журнала (тогда как params [: thing] этого не произошло), но это ничего не меняет с точки зрения ошибкисообщение, которое я получаю. </p>

1 Ответ

2 голосов
/ 05 октября 2010

Когда вы звоните unless @thing.user_id?, он исчезает, потому что нет @thing (он не передается от вашего контроллера к вашей модели в качестве переменной экземпляра).

Я не помню, как именно это работает, но я почти уверен, что при вызове validate :user_valid он передаст запись, которая будет проверена для вас. Если это действительно так, вы можете попробовать:

def user_valid
  errors.add("you must be logged in to add a thing") unless user_id?
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...