0

我通过 Ruby on Rails 中的两个模型之间的关联设置了一个 has_many。设置如下。模型是用户和文档,连接模型是所有权。模型定义如下:

class Ownership < ActiveRecord::Base
  attr_accessible :document_id, :user_id 
  belongs_to :user
  belongs_to :document 
end

class User < ActiveRecord::Base
  has_many :ownerships
  has_many :documents, :through => :ownerships
end

class Document < ActiveRecord::Base
  has_many :ownerships
  has_many :users, :as => :owners, :through => :ownerships
end

现在我的问题是如何在创建文档时将创建文档的用户设置为文档的所有者。该项目还使用 devise、cancan 和 rolify 进行用户处理。我试图像这样在 Codument 控制器的新动作中设置它,但没有成功

def new 
  @document = Document.new

  @document.users = current_user

  respond_to do |format|
    format.html # new.html.erb
    format.json { render json: @document }
  end 
end 

我怎样才能正确地做到这一点?我的 Document 控制器的新操作是否适合这样的事情?任何帮助,将不胜感激。

4

1 回答 1

1

首先,您需要在控制器的 create 方法中分配用户。其次,由于一个文档可以有许多用户,@document.users 是一个可枚举的,不能简单地通过执行分配单个用户

@document.users = current_user

你可以这样做:

@document.owners << current_user

在创建方法中。请注意,根据您的模型,文档具有所有者而不是用户。

改变

has_many :users, :as => :owners, :through => :ownerships

has_many :owners, source: :user, through: :ownerships, foreign_key: :user_id

在您的文档模型中。

这会在保存文档时存储当前用户。

于 2013-01-13T14:53:02.567 回答