Rails设置动态方法值

时间:2019-03-02 03:34:50

标签: ruby-on-rails ruby ruby-on-rails-5.2

尝试使用send设置用户模型值时出现错误。正确的方法是什么?

  

SyntaxError((irb):22:语法错误,意外的'=',期望   输入结束)

User.first.send(:first_name)="John"

2 个答案:

答案 0 :(得分:3)

要动态推断方法名称并调用它,但又不想出现封装问题时,请使用public_send

user = User.first
user.public_send(:first_name=, 'Ray')

也许send也可以在上述代码中使用,但在大多数情况下不建议使用。

User.first.public_send(:first_name=, 'Ray')将无用,因为您正在为User对象分配值,并且此setter方法不会保存值。
您的对象没有存储在任何引用中,因此您将丢失对setter执行了first_name操作的对象。

将其放入类似 user 的变量中,然后进行此类操作,以便进行跟踪,因此以后可以保存 user 对象,还可以查看所做的更改对于该变量

答案 1 :(得分:0)

想出了一种简单得多的方法。

User.first [:first_name] =“约翰”