我有一个实体:Book of book
。
实体类与其他表格有has_many
关系,例如pages
。
假设page_1
和page_2
是我想要保存的有效值。非动态版本类似于:
entity.pages = [page_1, page_2]
如何动态设置?
我尝试使用send
(对于has_one工作正常)没有运气:
attr = :pages # my dynamic attribute
book.send(attr) = [page_1, page_2]
# SyntaxError: unexpected '=', expecting end-of-input
# mc.send(:diagnoses, '=') = [s]
# ^
当我使用<<
时,似乎有效:
book.send(attr) << page_1
但问题是我需要支持删除,例如如果这本书有第3页,现在它有第1页和第2页。
由于性能和安全性,我不想使用eval
。不确定它是否相关,但这些动态属性都具有相同的类 - has__many具有动态条件。
答案 0 :(得分:2)
正确的格式是调用setter(赋值)方法。通常是属性后跟等号。在您的情况下,您需要pages=
book.send(attr.to_s + '=', [page_1, page_2] )
相当于
book.send('pages=', [page_1, page_2])
这是......
book.pages=([page_1, page_2])
或更常规编写的
book.pages = [page_1, page_2]
答案 1 :(得分:0)
尝试book.association(:pages).target