可以真正使用你的帮助,了解这个复杂的轨道问题我一直在敲打着... ...
我有以下型号:
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])
然后在视图中:
<%=form_for [:space, @permission] do |f| %>....
但这不起作用,错误:
如果(user&amp; project)的条件在DB中没有任何记录:“NilClass的未定义方法`model_name':Class”
如果数据库中有记录,则表示用户确实在此项目中有角色:"No route matches {:action=>"destroy", :controller=>"permissions", :project_id=>#<Permission project_id: 3, role_id: 2, user_id: 13>}"
理想情况下,我希望此表单显示当前权限(如果有)给定(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来获取和设置权限?
答案 0 :(得分:2)
对于你有一个nil对象的第一个错误你应该传入一个空白对象,无论你将对象传递给表单,例如@permission ||= @project.permissions.new
(假设它是导致nil对象的权限对象。或者是发烧友@project.permissions.find_or_initialize_by_user_id(params[:user_id])
。
对于第二个错误,奇怪的是它正在尝试映射到destroy,它应该尝试映射到:update action对吗?运行rake routes
以查看应用程序中的所有路由以验证PUT / projects /:project_id / permissions /:id操作是否存在并映射到权限#update