Rails模型建议

时间:2011-02-01 00:33:29

标签: ruby-on-rails model entity-relationship

我需要一些关于我将要开发的模型关系的建议: 我想创建一个研究表来跟踪平台内执行的所有reasesearch。 在我正在开发的平台中,用户可以搜索其他用户。 为了做到这一点,我想在研究表中创建3个字段:执行者(提交研究的user_id) Research_string (表演者提交的字符串)和< strong>结果(即一个或多个用户)。 当然,用户和研究表之间的关系将是多对多,但请注意,研究表有2个不同的列,涉及user_id(执行者和结果),那么我如何指定为rails?我想是这样的:

 class User < ActiveRecord::Base
  has_many :performed_research, :through => :research_table

 class Research < ActiveRecord::Base
  has_many :users

但是,如何指定Research表中的has_many用户隐含两个不同的关系,具体取决于列? TNX

已编辑:我的解决方案

您的解决方案不正确,因为用户只进行了研究,而不是研究结果。我做了另一个解决方案,它不是最好的解决方案,但它有效,我想让你的判断:

class Research < ActiveRecord::Base
  belongs_to :searcher, :class_name => 'User', :foreign_key=> 'submitter_id'
  has_many :found_users, :through=>:user_researches,:source=>:user
   #It is necessary to let the association work without class_name it would look for 

userResearch class
  has_many :user_researches, :class_name =>'User_research'
end

class User_research < ActiveRecord::Base
  belongs_to :user
  belongs_to :research
end

class User < ActiveRecord::Base
  # It returns a list of research performed by the user
  has_many :researches, :foreign_key => 'submitter_id'
  # It is necessary to let the searcher relationship works
  has_many :user_researches, :class_name =>'User_research'
  #==> Searcher will return an Array of research where the user's skill has been researched
  has_many :follower_researches, :through => :user_researches, :source=>:research
end

我说它;它不是最好的,因为用户模型的follower_research,当他结果时显示一系列研究......而不是搜索他的提交者数组,所以为了获得它们,我有滚动研究数组,然后采取搜索字段...你是否能够进行改进(希望不如此复杂)

2 个答案:

答案 0 :(得分:1)

你的意思是这样吗?

class User < ActiveRecord::Base
  has_many :research_entries


class ResearchEntry < ActiveRecord::Base
  has_one :performer, :class_name => 'User'
  has_and_belongs_to_many :resulting_users, :class_name => 'User'

更新:我将此更改为使用has_and_belongs_to_many关系,这将允许您使用连接表将许多用户连接到ResearchEntry的“resul_users”字段

答案 1 :(得分:0)

这样的事情:

class User < ActiveRecord::Base
  has_many :submitted_researches, :class_name => 'Research', :foreign_key => 'submitter_id' 
  has_manu :researches, :through => :performed_researches

class Research < ActiveRecord::Base
  belongs_to :submitter, :class_name => 'User'
  has_many :researchers, :through => :performed_researches, :class_name => 'User'

class PerformedResearch < ActiveRecord::Base
  belongs_to :user
  belongs_to :research

请参阅:http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association

更新:我想我误解了一些事情。结果是什么?它与用户有什么关系?

更新2:仍然不确定我理解,但这是另一个刺伤

我原本以为你正在做一些与学术研究有关的事情,而研究模型则是研究论文,表演者是进行研究的科学家。

从重新阅读你的问题我现在认为你有一个带有一些用户的rails应用程序和一个搜索功能,让用户可以搜索其他用户,并且每次搜索都会尝试跟踪哪个用户进行了搜索以及他们找到的用户。

如果有任何这些假设是错误的,请告诉我。

基于此:

class User < ActiveRecord::Base
  has_many :searches #all the searches this user performed

class Search < ActiveRecord::Base
  belongs_to :searcher, :class_name => 'User' # the user who performed the search
  has_many :found_users, :though => :user_search_results, :foreign_key => 'user_id' #  using foreign_key because I want to change the name to 'found_users'
  #alternatively if you don't want to use foreign_key use the line bellow instead
  #has_many :users, :thorough => :user_search_results

class UserSearchResult < ActiveRecord::Base
  belongs_to :user 
  belongs_to :search