Form_for嵌套资源权限(Y模型)

可以真正使用你的帮助,了解这个复杂的轨道问题我一直在敲打墙上…

我有以下型号:

Permissions (user_id, role_id, project_id) Roles (id, name) Projects (id, name) 

权限是角色和项目的Y模型。

我正在努力制作一个表单,允许用户添加或更新用户的项目权限

在控制器中我有:

 @project = Space.find(params[:project_id]) @permission = @project.permissions.find_by_user_id(params[:user_id]) 

然后在视图中:

 .... 

但这不起作用,错误:

  • 如果(用户和项目)的条件在DB中没有任何记录:“NilClass的未定义方法`model_name’:Class”

  • 如果数据库中有记录,意味着用户确实在该项目中有角色: "No route matches {:action=>"destroy", :controller=>"permissions", :project_id=>#}"

理想情况下,我希望此表单显示当前权限(如果有)给定(Used / Project)…如果没有当前权限,我希望该人能够创建记录。

任何人都可以在Rails 3中体验这种关系吗? 感谢您提供的任何建议。

路由文件(特定于这些模型的部分)

 resources :projects do resources :photos, :permissions collection do get 'yourcurrentprojects' end end 

控制器 – 用户可以选择CRUD权限的路径: /projects/3/permissions – 我相信我想使用Permissions.rb def Show和def Update来获取和设置权限?

对于你有一个nil对象的第一个错误你应该传入一个空白对象,无论你将对象传递给表单,例如@permission ||= @project.permissions.new (假设它是导致nil对象的权限对象。或者更加高兴@project.permissions.find_or_initialize_by_user_id(params[:user_id])

对于第二个错误,奇怪的是它正在尝试映射到destroy,它应该尝试映射到:update action对吗? 运行rake routes以查看应用程序中的所有路由以validationPUT / projects /:project_id / permissions /:id操作是否存在并映射到权限#update