Вызовы функций в Ruby действуют как передача сообщений.Итак, что вы ищете: send .
Объект @account
в вашем примере не является хешем, подобным @user
, это экземпляр класса.
Но у Rails есть еще лучший способ инициализации модели с атрибутами:
@account = Account.new(username: '123', full_name: 'John Doe')
В контроллере Rails они обычно находятся в хэше params
, если вы правильно написали форму:
@account = Account.new(params[:user])
Если вам нужно сделать это вручную, вы можете:
@account = Account.new
# set all attributes at once
@account.attributes = @user
# this also works, but it's the least desirable
@user.each {|key, value| @account.send("#{key}=", value) }
Последний пример работает, потому что @account.key = value
на самом деле является синтаксическим сахаром для вызова метода: @account.key=(value)
Я оченьрекомендуем прочитать Rails Form Helpers и построить ваши формы так, как это предлагается.