如果对象具有多个belongs_to,如何创建该对象?

问题描述

| 我有以下内容
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
我可以创建组织和用户...如果有两个belongs_to,如何创建条目?这个模式叫什么?     

解决方法

双嵌套资源非常棘手。用户的窍门通常是将其排除在所需的输入路径之外。 您的问题有点笼统,但是如果您指定更多信息,人们将可以为您提供更好的帮助。另外,我建议您将gem Devise用于您的用户管理系统。由于您使用的是\\ users \,所以我假设您希望组织中的用户创建条目。创建的条目将是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_filter:loadOrg的方法来为整个类设置组织
def loadOrg
   @org = Org.find(params[:id])
end
当然,这是假设您的路径类似于:/ org /(id)/ entry /(entry_id) 并不是 / org /(id)/ user /(user_id)/ entry /(entry_id) 我认为这是不必要的,并可能导致更多问题。您始终可以创建一个用户页面模型来按用户调用所有条目,但是默认路由不一定必须在路径中包括用户。     ,我没看到任何问题。
@entry = Entry.create(:entry_text => \"Hello World!\")
现在提出问题,以澄清您需要什么:
@entry
可以同时属于
org
user
吗?还是只能属于其中之一?
@entry
应该至少属于其中之一吗? 如果
@entry
应该只是其中之一,那么您应该使用
Polymorphism
  http://railscasts.com/episodes/154-polymorphic-association
class Entry < ActiveRecord::Base
  belongs_to :textable,:polymorphic => true
  validates_presence_of :entry_text
end

class Org < ActiveRecord::Base 
  has_many :users              
  has_many :entries,:as => :textable       
end

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...