лучший способ установить отношения между 3 моделями? - PullRequest
1 голос
/ 06 марта 2011

У меня есть эти 3 модели: и вот что мне нужно:

В основном у меня есть records, и user должен содержать определенный role, назначенный ему, чтобы иметь возможность вносить изменения в record. каждый отдельный record может иметь несколько roles, и каждый role может принадлежать множеству различных версий record. теперь, когда у меня есть контроль версий, каждая отдельная роль может принадлежать множеству разных версий записи (разные версии одной записи могут быть связаны через общий атрибут second_id для записей).

Как лучше всего установить эти отношения между тремя моделями?

спасибо

Ответы [ 2 ]

0 голосов
/ 06 марта 2011

Используйте cancan, http://github.com/ryanb/cancan. Это даст вам именно то, что вам нужно.

0 голосов
/ 06 марта 2011

Попробуйте:

Измените User модель:

class User
  has_many :roles
  has_many :records

  def has_access_to?(obj)
    roles.exists?(:id => obj.role_ids)
  end    
end

Код контроллера:

class RecordsController < ApplicationController
  before_filter :require_user  # checks if the user is logged in
  before_filter :load_record, :except => [:index]
  before_filter :require_permission, :except => [:new, :create, :index]

private

  def require_permission
    return true if current_user.has_access_to?(@record)
    render :text => "You don't have permission to complete this action.",
           :status => '401 Unauthorized'
    return false
  end

  def load_record
    case(action.to_sym)
    when :new, :create
      @record = current_user.records.build(params[:record])
    when :edit, :update, :show, :destroy
      @record = current_user.records.find(params[:id])
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...