如何从字符串参数值中检索关联数据



我有两个模型UserPosthas_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

最新更新