建立3种模式之间关系的最佳方法?

时间:2011-03-06 19:45:26

标签: ruby-on-rails

我有这3个型号:这就是我需要的:

基本上我有records,而user必须持有指定给他的特定role才能对record进行更改。每个不同的record可以有多个roles,每个role可以属于record的许多不同版本。现在我有一个版本控件,每个角色都可以属于一个记录的许多不同版本(一个记录的不同版本可以通过记录的公共secondary_id属性关联)。

在三种模型之间建立这种关系的最佳方法是什么?

谢谢

2 个答案:

答案 0 :(得分:0)

试试这个:

更改您的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

答案 1 :(得分:0)

使用cancan,http://github.com/ryanb/cancan。它会准确地为您提供所需的信息。