我有两个模型User
和Post
has_many
关联。如何使用字符串对象调用特定用户的所有帖子对象,例如"posts"
。这里的问题是"posts"
对象以字符串的形式出现,因为我作为参数传递。如下@user."posts"
.我可以将字符串转换为任何类型的吗?
您可以使用public_send
方法
调用由符号标识的方法,向其传递任何参数 指定。与 send 不同,#public_send 仅调用公共方法。什么时候 该方法由字符串标识,字符串转换为 象征。
User.find(1).public_send('posts')
和params
User.find(1).public_send(params[:name]) # replace name obviously with your query
更新(安全(
@fanta在关于传入参数安全性的评论中做了一个非常好的观察。如果你有一个敏感的应用程序,你应该添加一些白名单
基本版本可以是仅允许模型上的has_many
关联。
# This will return all `has_many`s on your User model
@whitelist = User.reflect_on_all_associations(:has_many).map(&:name)
if @whitelist.include? params[:name]
User.find(1).public_send(params[:name])
end