我有两个模型 X 和 Y , X 有很多 Y , Y 属于 X 。
在 Y 控制器中,我需要添加一种方法来限制 X 查看或编辑任何其他 Y 的能力,但它需要&#39相关的。
假设我创建了一个对象 x1 ,它连接了3个不同的 Y
和 x2 连接到其他4个不同的 Y
在显示页面上,如果我通过id调用任何y,那么无论transaction
是什么,我都会得到它
我需要将session[x.id]
与x.id
如果它们相等则返回true 在实例化y对象之前我需要做的问题 我不想使用任何宝石 如果有人可以帮助我深深体会到它。
谢谢
答案 0 :(得分:0)
在展示页面上,如果我通过id调用任何y,无论如何,
session[x_id]
它取决于你,你展示的是什么。您可以使用以下命令限制您的简单:
@y = X.find(session[:x_id]).ys.where(id: params[:id]).first
# or faster
@y = Y.where(id: params[:id], x_id: (session[:x_id] || -1)).first # (session[:x_id] || -1) to prevent finding a record where x_id is null
答案 1 :(得分:-1)
def show
@y = Y.find(params[:id])
unless @y.x.id == session(x.id)
render status: :forbidden, text: 'You are not allowed here!' and return
end
end