0

我是 Rails 新手,并试图了解我们如何使用 Rails 中可用的工具构建“复杂”模型(及其关联)。快速想象以下示例场景:Users是 ONE Racing 的成员Team。用户可以创建CarsSchedules. 这些汽车有DriversFuel级别EnginesWheels。这些Wheels有和。Tires_ 你明白了……HubsMilesDriven

鉴于所有关于嵌套只有 1 级深度的警告......我仍然在努力如何成为 RESTful 和 Rails-y 并提供一个允许用户构建一个Car带有Tires.

我知道我们可以使用Session&Cookie以及隐藏字段。所以用户登录......并被路由到他们的团队页面teams(current_user.team_id)。然后他们想创建一个Car. 这条路线通往new_team_car_path(current_user.team_id)他们可以建造汽车的地方……现在我想在这辆车上添加一个轮子……那条通往……new_team_car_wheel_path(current_user.team_id, car_id)等等……的路线也是如此吗?我认为不是...但是,Rail-y 方式是什么?

此外,由于构建的所有内容最终都将与团队(和用户)相关联,因此最好将team_id/或user_id关联一直“携带”到在运行时?Tire Team

我确定这是基本的东西,但是新手让我对如何最好地处理它感到困惑......

4

1 回答 1

1

这个问题没有单一的答案。您提到使用会话变量和隐藏字段——这些都是可行的方法,并且必须根据具体要求做出决定。您正在努力寻找最佳答案这一事实是一个好兆头,因为它表明您愿意考虑替代方案。

在这种情况下,您有一个优势,因为您不需要在 URL 中传递用户信息或其关联,因为您的授权代码已经使其在控制器中可用。因此,我会从您的参数中删除用户和团队 ID,并从以下位置访问它们current_user

# GET /cars/:car_id/wheels/new

def new
  @car = Car.find(params[:car_id])
  @wheel = @car.wheels.build
end

# POST /cars/:car_id/wheels

def create
  @user = current_user
  @team = @user.team
  @car = Car.find(params[:car_id]
  @wheel = @car.wheels.build(params[:car][:wheel])
  ...
end

唯一的问题是如果您需要允许一个用户访问另一个用户的Car. 在这种情况下,选择用户的隐藏表单字段(或下拉菜单)应该可以工作。相反,您可能需要进行授权检查以防止用户访问彼此的“汽车”

于 2010-12-17T20:36:44.817 回答