我在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控制器的新动作是否适合这样的事情?任何帮助将不胜感激。
答案 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
在您的文档模型中。
这会在保存文档时存储当前用户。