我是Rails的新手,并试图了解我们如何使用Rails中可用的工具构建“复杂”模型(及其关联)。快速想象以下示例场景:Users
是ONE racing Team
的成员。用户可以创建Cars
和Schedules
。这些汽车有Drivers
,Fuel
级别,Engines
和Wheels
。这些Wheels
有Tires
,Hubs
和MilesDriven
。你明白了......
鉴于所有关于嵌套的警告只有1级深度...我仍然如何成为RESTful和Rails-y并且提供允许用户构建{{1}的UI与Car
。
我知道我们有Tires
&我们可以使用Session
以及隐藏的字段。因此,用户登录...并被路由到他们的团队页面Cookie
。然后他们想要创建一个teams(current_user.team_id)
。这路线到Car
,他们可以在那里建车...现在我想给这辆车增加一个轮子......那路由到new_team_car_path(current_user.team_id)
等等......?我想不是......但是,Rail-y的方式是什么?
此外,由于构建的所有内容最终会与团队(和用户)相关联,因此最好将“new_team_car_wheel_path(current_user.team_id, car_id)
和/或team_id
关联”一直“传递”到{ {1}} 或通过在运行时跟踪层次结构中的关联来查询user_id
是否合理?
我确信这是基本的东西,但是newbness让我对如何最好地接近它感到困惑......
答案 0 :(得分: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
。在这种情况下,选择用户的隐藏表单字段(或下拉菜单)应该有效。相反,您可能需要进行授权检查以防止用户访问彼此的“Car”