2014-09-22 7 views
-1

Я новичок в мире разработчиков rails. Пожалуйста, помогите мне понять. Я 3 таблицы: звонки, вопросы, результатырельсы отношения. Rails 4

вызовов: идентификатор, имя, дата

Вопросы есть: идентификатор, вопрос

результатов: идентификатор, call_id , question_id, result

Я прочитал руководство Rails, так как я понимаю, что создал 3 модели.

В моей модели Call.rb Я сделал следующее соотношение:

has_many :results 
has_many :question, through: :results 

Мой Result.rb

belongs_to :call 
belongs_to :question 

Мои Question.rb

has_many :result 

Итак, могут быть много записей в таблице «результаты» с одним call_id, и это может быть одна связь с вопросом через результаты таблицы

В случае если попытаться запустить такой код:

@calls = Call.all 

чем на мой взгляд:

<% @calls.each do |call| %> 
<%= call.result.result %> 
<% end %> 

Я ошибка «результат - неопределенный метод». Но это должно быть свойство.

Что я делаю неправильно? Спасибо!

+0

Вы пробовали просто '<% = call.result%>'? –

+0

но у меня нет поля ** call_id ** в таблице вопросов. так, для меня has_many: вопросы - это также неверно –

+0

если я делаю <% = call.result%> - у меня ошибка: undefined method 'result ' –

ответ

1

По вашей схеме, ваши ассоциации должны выглядеть следующим образом

class Call < ActiveRecord::Base 
    has_many :questions 
    has_many :results 
end 

class Question < ActiveRecord::Base 
    belongs_to :call 
end 

class Result < ActiveRecord::Base 
    belongs_to :call 
end 

Таким образом, в представлении,

<% @calls.each do |call| %> 
    <% call.results.each do |result| %> 
    <%= result.result%> 
    <% end %> 
<% end %> 
+0

, поэтому мне нужно было сделать 2 цикла, это решение. Благодаря! –

0

Первое, что я замечаю, что ваш вызов должен иметь много вопросов, и многие результаты через вопросы. Это потому, что называет собственные вопросы, которые, в свою очередь, сами приводят к результатам.

class Call < ActiveRecord::Base 
    has_many :questions 
    has_many :results, through: :questions 
end 

Вам не нужен call_id в классе результатов. Но, если вы хотите сохранить его там, вам не нужно проходить через:: вопросы в вашем классе вызовов (при наличии прямой связи между ними)

В вашем классе вопросов я предполагаю, что это опечатка, но он должен быть множественным

has_many :results 

Сказав, что ваш цикл через вызовы будет приносить результаты (множественное число), а не результат (в единственном числе), учитывая, что вызов может иметь много результатов.Поэтому:

<% @calls.each do |call| %> 
    <% call.results.each do |result| %> 
    <%= call.result %> 
    <% end %> 
<% end %> 
+0

nope, звонок имеет много вопросов через результат. –

+0

Извините, i'v pdated мое сообщение, потому что это ошибка в описании схемы –

+0

, пожалуйста, посмотрите новое описание схемы –

1

Несколько вещей.

Во-первых, вам нужно исправить свои ассоциации, чтобы совпадение множественного числа и единственного числа. has_many :result не работает, поскольку Марсело указывает.

Во-вторых, вам нужно убедиться, что ваши таблицы действительно имеют правильный идентификатор, чтобы заставить ассоциации работать. Используйте консоль рельсов для проверки Result. Из вашей информации о вопросе, он должен иметь атрибуты для call_id и question_id. Как только вы подтвердите это, создайте несколько объектов в консоли и проверьте свои ассоциации.

@call = Call.create(name: "test", date: Time.now) 

@result = Result.create(call_id: @call.id, result: "some result") 

Тогда

@call.result # should yield the Result record you just created 

Наконец, вам нужно переименовать атрибут result для Result. Это очень запутанно и вызовет проблемы.

+0

может у меня объяснить, пожалуйста, разные с множественным и единственным? –

+0

'has_many' подразумевает множественное число (то есть более одного). Поэтому, если вы собираетесь использовать 'has_many', это должно быть с': results' (множественное число) NOT 'result' (единственное число). – settheline

+0

ах это очень просто, спасибо. Теперь я пытаюсь исправить и попробовать ваше решение! –

Смежные вопросы