问题描述
|
我有以下内容:
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