我有一个使用以下模型设置的项目。每个->
代表has_many
关系:Ruby中嵌套路由的DRY控制器
Users->Goals->Milestones
我的路线为Milestones
这个样子的:
user_goal_milestones GET /users/:user_id/goals/:goal_id/milestones(.:format) milestones#index
POST /users/:user_id/goals/:goal_id/milestones(.:format) milestones#create
new_user_goal_milestone GET /users/:user_id/goals/:goal_id/milestones/new(.:format) milestones#new
edit_user_goal_milestone GET /users/:user_id/goals/:goal_id/milestones/:id/edit(.:format) milestones#edit
user_goal_milestone GET /users/:user_id/goals/:goal_id/milestones/:id(.:format) milestones#show
PUT /users/:user_id/goals/:goal_id/milestones/:id(.:format) milestones#update
DELETE /users/:user_id/goals/:goal_id/milestones/:id(.:format) milestones#destroy
我发现自己在很多人的里程碑控制器做了很多这方面的“功能”:
def index do
@user = User.find(params[:user_id])
@goal = Goal.find(params[:goal_id])
end
def edit do
@user = User.find(params[:user_id])
@goal = Goal.find(params[:goal_id])
end
如何修改我的控制器,所以我不必须定义@user
和@goal
所有的时间? 我试过把它们直接放在顶部,就在类定义块的开始之后,但它没有起作用。
甜!这真的很酷! – CamelBlues
只是确保你总是有:user_id和:goal_id –
这可能会导致应用程序出现意外的行为。您应该测试传递的目标是否真的属于传递的用户,否则事情会变得很糟糕。请在答案中添加测试。 – fotanus