Ruby on Rails在实例化之前检查对象

时间:2016-10-08 11:37:40

标签: ruby-on-rails ruby

我有两个模型 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对象之前我需要做的问题 我不想使用任何宝石 如果有人可以帮助我深深体会到它。

谢谢

2 个答案:

答案 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