Рекомендации по модели рельсов - PullRequest
0 голосов
/ 01 февраля 2011

Мне нужны некоторые предложения для модельных отношений, которые я собираюсь развить: я хочу создать исследовательскую таблицу, которая будет отслеживать все исследования, проводимые внутри платформы.На платформе, которую я разрабатываю, пользователь может искать других пользователей.Чтобы сделать это, я подумал создать 3 поля в таблице исследований: Исполнитель (идентификатор_пользователя, отправляющего исследование) Research_string (строка, которую отправляет исполнитель) и Результаты (это один или несколько пользователей).Конечно, взаимосвязь между таблицами пользователей и исследований будет много-многим, но обратите внимание, что в таблице исследований есть 2 разных столбца, которые включают user_id (исполнителя и результаты), так как я могу указать рельсы?Я подумал что-то вроде этого:

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

 class Research < ActiveRecord::Base
  has_many :users

Но как мне указать, что пользователи 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 ]

1 голос
/ 01 февраля 2011

Вы имеете в виду что-то подобное?

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, которое позволит вам использовать соединительную таблицу для подключения многих пользователей к полю "result_users" в ResearchEntry

0 голосов
/ 01 февраля 2011

Примерно так:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...