У меня есть система из трех таблиц: компании, клиенты и матчи. Совпадения включают, например, личные заметки, которые каждая сторона делает о другой, и некоторые параметры, которые они могут установить относительно другой.
У меня есть два набора представлений о компаниях и клиентах, чтобы каждая сторона смотрела на другую и изменяла свои заметки и настройки.
# Customers Controller
def show
@customer = Customer.find(params[:customer])
@matchings = @customer.matchings.find... #corrected
@company = Company.find(params[:company])
end
Очевидно, @matchings является неполным. Учитывая, что @matchings имеет поля customer_id и company_id, как мне найти подходящую запись? Спасибо!
------ UPDATE ------
Это было действительно полезно, спасибо, jdl!
Компания задает клиенту некоторые вопросы, а клиент отвечает. Вопросы хранятся в Вопросе, а ответы хранятся в MatchingAnswer. Чтобы уточнить структуру базы данных:
# models, aggregated
1st set of connections:
Company has_many :questionlists (QuestionList belongs_to :company)
QuestionList has_many :questions (Question belongs_to :question_list)
Question has_many :matching_answers (MatchingAnswer belongs_to :question)
2nd set of connections:
Company has_many :matchings (Matching belongs_to :company)
Matching has_many :matching_answers (MatchingAnswer belongs_to :matching)
Помните, что соответствие - это сквозная таблица между Компанией и Клиентом. Я должен показать компании каждый вопрос, который задала компания, и каждый ответ на этот вопрос от конкретного клиента.
# QuestionLists controller
@questions = @questionlist.questions.find(:all)
@matchinganswers = @matching.matching_answers.find(:all, :conditions => ["question_id= ?", @question.id])
... за исключением того, что условие должно удовлетворяться каждым идентификатором вопроса, предоставленным моим циклом ВНУТРИ представления. Давайте посмотрим на вид.
# view
<% @questions.each do |q| %>
<li><%= q.question %></li>
<li><% q.matching_answers.each do |a| %>
<%= a.answer %>
<% end %></li>
<% end %>
Я знаю, что это пронизано дырами ... Я просто не смог их правильно заполнить. Как я могу сделать цикл под каждым вопросом, чтобы увидеть ответы, которые клиент дал на этот вопрос? Спасибо большое, ребята, это потрясающая группа. :)
------ ОБНОВЛЕНИЕ № 2 ------
Проблема не во вложении, а в том, что q.matching_answers дает мне КАЖДЫЙ ответ, который каждый клиент когда-либо давал на вопрос q. Мне нужно сгенерировать только те match_answers, которые вытекают из определенного вопроса и соответствуют нашему match_id (@ match.id). Модель MatchingAnswer содержит поле match_id, поэтому каждый ответ уникален для конкретного соответствия между клиентом и компанией. Моя проблема заключается в настройке правильных параметров, поэтому я получаю только те сопоставляющие ответы, которые удовлетворяют:
MatchingAnswer.matching_id = @matching.id
MatchingAnswer.question_id = @question.id
Проблема в том, что, хотя я действительно вычисляю @ match.id в контроллере QuestionLists, у меня есть доступ только к @question_list (есть только один) и @questions (все вопросы, принадлежащие этому списку). Я подумал, что должен сделать цикл внутри представления, в котором говорится, что для каждого вопроса задайте те вопросы, которые соответствуют MatchingAnswer.question_id = [this question.id]. Я пытался сделать это с помощью указанного выше гнезда, но, как вы можете сказать, оно не дает нам два параметра, которые нам нужны.