рубин требует относительного вопроса - PullRequest
0 голосов
/ 03 ноября 2018

Здравствуйте, я пытаюсь научиться делать приложение ruby ​​on rails. Я застрял на синтаксисе require_relative. В настоящее время у меня есть файл game_runner.rb, которого нет в каталоге приложения, который должен получить метод (who_is_hider) из role.rb, который есть в моделях. Я правильно печатаю? Когда я запускаю текущий код, я получаю ошибку «неинициализированная константа ApplicationRecord». Это не имеет смысла, так как у меня есть файл application_record.rb, который имеет (self.abstract_class = true) внутри. Спасибо за ваше время.

image

game_runner.rb

require_relative './app/models/Role'
who_is_hider

role.rb

class Role < ApplicationRecord
  belongs_to :round
  belongs_to :player
  enum label: {seeker: 1, hider: 2, decoy: 3}

  validates :player_id, uniqueness: {scope: :round_id}

  def who_is_hider    
    p "made it here"   
  end
end

application_record.rb

class ApplicationRecord < ActiveRecord::Base
  self.abstract_class = true
end

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Хммм, вы используете один файл ruby ​​и планируете загрузить все окружения рельсов? Ваша ролевая модель знает о ApplicationRecord, потому что Rails загружает МНОГО вещей в фоновом режиме. Если Rails не посередине, вы должны явно сказать, что думает загрузить. Вы можете запросить ApplicationRecord в файле game_runner или в файле role.rb, но тогда вам также потребуется ActiveRecord.

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

0 голосов
/ 03 ноября 2018

Я застрял в синтаксисе require_relative. […] Я правильно печатаю? Когда я запускаю текущий код, я получаю ошибку «неинициализированная константа ApplicationRecord».

Да, ваш синтаксис правильный. Если ваш синтаксис был неправильным, ваш код даже не запустится, и вы получите SyntaxError. Тот факт, что ваш код выполняет , запускается и выдает исключение NameError, без сомнения показывает, что ваш синтаксис правильный.

Как простой способ проверить правильность синтаксиса, вы можете

  • визуально проверьте синтаксическую раскраску в вашем редакторе,
  • визуально проверьте синтаксическую раскраску в вопросе переполнения стека, если вы отправите один,
  • запустить ruby -c, чтобы проверить синтаксис

Последний вариант является предпочтительным, если он у вас есть, конечно. Но иногда вы пишете код в среде, где у вас нет движка Ruby, и в этом случае вы можете по крайней мере использовать свой редактор или даже (по общему признанию, не очень хороший и легко запутанный) выделение этого переполнения стека использует. Хотя последний вариант не очень хорош, он все же действительно выделяет легкие ошибки, вызванные опечатками, например, неопределенные строковые литералы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...