Форма_для разрешений для вложенных ресурсов (модель Y) - PullRequest
1 голос
/ 12 октября 2010

действительно может использовать вашу помощь, понимая эту сложную проблему с рельсами, которую я стучал головой об стену ...

У меня есть следующие модели:

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| %>....

Но это не работает, ошибки:

  • Если критерии (пользователь и проект) не имеют записей вБД: "неопределенный метод` имя_модели 'для NilClass: Class "

  • Если в БД есть запись, то есть пользователь имеет роль в этом проекте: "No route matches {:action=>"destroy", :controller=>"permissions", :project_id=>#<Permission project_id: 3, role_id: 2, user_id: 13>}"

В идеале, я хочу, чтобы эта форма показывала текущее разрешение, если оно есть, для данного (Используется / Проект) ... Если нет текущего разрешения, я хочу, чтобы человек былв состоянии создать запись.

Кто-нибудь испытывает подобные отношения в Rails 3?Спасибо за любые советы, которые вы можете отправить мне.

Файл маршрутов (часть, специфичная для этих моделей)

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

Контроллеры - путь, по которому пользователи дают возможность CRUD разрешение: /projects/3/permissions - Я полагаю, что я хотел бы использовать Permissions.rb def Показывать и определять обновления для получения и установки разрешений?

1 Ответ

2 голосов
/ 12 октября 2010

Для первой ошибки, когда у вас есть нулевой объект, вы должны передать пустой объект, где бы вы ни передавали объекты в формы, например @permission ||= @project.permissions.new (при условии, что объект разрешения вызывает нулевой объект. Или быть более красивым @project.permissions.find_or_initialize_by_user_id(params[:user_id]).

Для второй ошибки странно, что он пытается сопоставить уничтожить, он должен пытаться сопоставить с действием: update right? Run rake routes, чтобы увидеть все маршруты в приложении для проверкичто действие PUT / projects /: project_id / permissions /: id существует и соответствует разрешениям # update

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...