Ruby on rails 3 如果对象有多个所属对象,如何创建该对象?

Ruby on rails 3 如果对象有多个所属对象,如何创建该对象?,ruby-on-rails-3,activerecord,Ruby On Rails 3,Activerecord,我有以下资料: class Org < ActiveRecord::Base has_many :users has_many :entries end class Entry < ActiveRecord::Base belongs_to :org belongs_to :user validates_presence_of :entry_text end

我有以下资料:

class Org < ActiveRecord::Base 
  has_many :users              
  has_many :entries          
end

class Entry < ActiveRecord::Base
  belongs_to :org              
  belongs_to :user             
  validates_presence_of :entry_text
end

class User < ActiveRecord::Base
  belongs_to :org              
  has_many :entries          
  validates_uniqueness_of :user_name
  validates_presence_of :user_name, :length => { :minimum => 3 }
end
classorg{:minimum=>3}
结束

我可以创建组织和用户。。。如果有两个项目属于\u,如何创建项目?这个模式叫什么?

我看不出有什么问题

@entry = Entry.create(:entry_text => "Hello World!")
现在,请提问以澄清您需要什么:

  • @entry
    能否同时属于
    org
    user
    ?或者它只能属于其中一个
  • @entry
    应该至少属于其中一个吗
如果
@entry
应该只属于其中一个,那么您应该使用
多态性

类条目true
验证是否存在:条目文本
结束
类Org:textable
结束
类用户:textable
验证:用户名的唯一性
验证是否存在:user\u name,:length=>{:minimum=>3}
结束

双嵌套资源很棘手。用户的诀窍通常是将其保留在所需的进入路径之外

你的问题有点宽泛,但如果你提供更多信息,人们会更好地帮助你。此外,我建议您在用户管理系统中使用gem designe。由于您使用的是“用户”,我假设您希望来自组织的用户创建条目。创建的条目将是org的一部分,用户将是会话的当前用户。很抱歉,如果我错误地假设了这一点

您的routes.rb文件可以如下所示(假设rails 3):

资源:组织做什么 资源:条目 结束

然后,入口控制器的创建过程如下所示:

@entry = @org.entries.new(params[:topic])
@entry.user = current_user #or however you are managing the current user's session.
您希望通过创建一个方法来为整个类设置组织,该方法加载当前组织并执行before_过滤器:loadOrg

def loadOrg
   @org = Org.find(params[:id])
end
当然,这是假设您的路径类似于:/org/(id)/entry/(entry\u id)

而不是

/组织/(id)/用户/(用户id)/条目/(条目id)

在我看来,这是不必要的,可能会导致更多的问题。您始终可以创建一个userpage模型,按用户调用所有条目,但默认路由不一定要在路径中包含用户

def loadOrg
   @org = Org.find(params[:id])
end