Rails has_many通过在创建时设置属性

时间:2013-01-13 14:15:52

标签: ruby-on-rails ruby-on-rails-3 has-many-through

我在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

现在我的问题是如何在创建文档时将创建文档的用户设置为文档的所有者。该项目还使用设计,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控制器的新动作是否适合这样的事情?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

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

@document.users = current_user

你可以这样做:

@document.owners << current_user

在create方法中。请注意,根据您的模型,文档包含所有者而非用户。

更改

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

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

在您的文档模型中。

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