开发者

Rails model advice

开发者 https://www.devze.com 2023-02-07 15:30 出处:网络
I need some suggests for the model relationship that I\'m going to develop: I want to create a research table that keep track of all the reasearches performed inside the platform.

I need some suggests for the model relationship that I'm going to develop: I want to create a research table that keep track of all the reasearches performed inside the platform. In the platform I'm developing, an user can search for other users. In order to do it, I thought to create 3 fields in the research table: Performer (user_id that submit the research) Research_string (The string that the performer submit) and Results (that is one or more user). Of course the relationship among user and research tables will be many to many, but note that the research table has 2 different column that involves the user_id (performer and results) so how can I specify to rails ? I thought something like that :

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

 class Research < ActiveRecord::Base
  has_many :users

But how can I specify that the has_many users in the Research tables implies two different relations depending by the column ? Tnx

EDITED: my solution

Your solution is not correct, because the user has only the research performed and not the research where he is resulted. I made another solution, that it's not the best of clear but it works, I would like to have your judge:

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
  bel开发者_如何学JAVAongs_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

I say that it;s not the best because the follower_research of the user model, show an array of research when he has been results ... and not an Array of submitter that searching him, so to obtain them, I have to scroll the array of research and then take the searcher field ... Are you able to perform an improvement (hopefully less complex than this)


Do you mean something like this?

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'

Update: I changed this to use the has_and_belongs_to_many relationship which will allow you to use a join table to connect many users into "resulting_users" field of the ResearchEntry


Something like this:

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

See: http://guides.rubyonrails.org/association_basics.html#the-has_many-through-association

Update: I think I misread something. What is results? and how is it related to users?

Update 2: Still not sure I understand but here's another stab

I originally thought you were doing something related to academic research and the Research model was for research papers with the performer being scientists that did the research.

From re-reading your question I'm now thinking you have a rails application with some users and a search feature that lets a user search for other users and for each search you are trying to keep track of which user did the search and which users they found.

Let me know if any of these assumptions are wrong.

Based on that:

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
0

精彩评论

暂无评论...
验证码 换一张
取 消