Ruby on rails Ruby/Rails-使用符号或字符串定义模型
我有以下代码:Ruby on rails Ruby/Rails-使用符号或字符串定义模型,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有以下代码: if params[:reviewable_type] == 'Offer' reviewable = Offer.find(params[:reviewable_id]) elsif params[:reviewable_type] == 'Request' reviewable = Request.find(params[:reviewable_id]) end 我是否可以通过执行类似于params[:reviewable\u
if params[:reviewable_type] == 'Offer'
reviewable = Offer.find(params[:reviewable_id])
elsif params[:reviewable_type] == 'Request'
reviewable = Request.find(params[:reviewable_id])
end
我是否可以通过执行类似于params[:reviewable\u type].find(params[:reviewable\u id])
的操作来简化此过程,基本上使用param中包含的字符串作为模型的名称?这应该可以:
params[:reviewable_type].constantize.find(params[:reviewable_id])
但出于安全原因,我建议不要这样做(提示:我猜您会在params[:reviewable\u type]
中找到类似User
的内容)
至少你应该这样做:
if ['Offer', 'Request'].include?(params[:reviewable_type])
params[:reviewable_type].constantize.find(params[:reviewable_id])
end
这应该起作用:
params[:reviewable_type].constantize.find(params[:reviewable_id])
但出于安全原因,我建议不要这样做(提示:我猜您会在params[:reviewable\u type]
中找到类似User
的内容)
至少你应该这样做:
if ['Offer', 'Request'].include?(params[:reviewable_type])
params[:reviewable_type].constantize.find(params[:reviewable_id])
end
你在找我
然而,您确实不应该盲目地允许用户实例化任意类的实例。您应该始终检查传入参数是否包含一个带有白名单的预期类:
if %w(Offer Request).include?(params[:reviewable_type])
reviewable = params[:reviewable_type].constantize.find(params[:reviewable_id])
end
你在找我
然而,您确实不应该盲目地允许用户实例化任意类的实例。您应该始终检查传入参数是否包含一个带有白名单的预期类:
if %w(Offer Request).include?(params[:reviewable_type])
reviewable = params[:reviewable_type].constantize.find(params[:reviewable_id])
end
太棒了,非常感谢。谢谢你的安全提示。太棒了,非常感谢。谢谢你的安全提示。