Загрузить файл YAML с переменной в Ruby - PullRequest
1 голос
/ 11 марта 2019

Я создаю чат-бота и храню свои «ответы» в файле Yaml ниже:

# say_hello.yml

- reply_type: text
  text: "Welcome <%= @user.first_name %>"
- reply_type: delay
  duration: 2
- reply_type: text
  text: "We're here to help you learn more about something or another."
- reply_type: delay
  duration: 2

Для запуска ответов я использую этот метод:

def process

  @user = User.find(user_id)
  replies = YAML.load(ERB.new(File.read("app/bot/replies/say_hello.yml")).result)

  replies.each do |reply|
    # code for replies...
  end

end

Однако, когда я запускаю это, я получаю ошибку «неопределенный метод» на first_name для @user.Если я запускаю тот же код в консоли, он работает.

Как определить переменную типа @user, а затем правильно загрузить файл YAML?

Ответы [ 2 ]

2 голосов
/ 11 марта 2019

Я бы предложил другой подход без ERB, основанный на спецификациях формата .

# in the YAML
- reply_type: text
  text: "Welcome %{user_name}"

# in the method
@user = User.find(user_id)
replies = YAML.load(
  File.read("app/bot/replies/say_hello.yml") % { user_name: @user.first_name }
)
0 голосов
/ 11 марта 2019

Я нашел способ, используя binding. Линия загрузки YAML с ниже и прекрасно работает:

replies = YAML.load(ERB.new(File.read("app/bot/replies/say_hello.yml")).result(binding))
...