Я думаю, что ваши participant
и user
модели должны быть объединены в одну, потому что не participant
user
? Я не понимаю, зачем нужна модель Participant
.
Скажем, мы сливаемся User
и Participant
в только User
, связь между User
и Voting
бы тогда:
User < ActiveRecord::Base
has_and_belongs_to_many :surveys
has_many :votings
end
Voting < ActiveRecord::Base
belongs_to :answer
belongs_to :user
attr_accessible :value
end
Теперь из первого блока кода:
Question 1
- Answer1 -> Please vote -1/0/1 (Checkbox field)
- Answer2 -> Please vote -1/0/1 (Checkbox field)
- Answer3 -> Please vote -1/0/1 (Checkbox field)
- Participant Comment (Text Field)
- Participant Average (Rating Field)
не голосует сделано по ответам пользователей? В таком случае нам нужно отношение user has_many :votings
? Я думаю, что ассоциация высказалась бы User
занимает много Surveys
, Survey
имеет много Questions
, Question
имеет много Answers
и ответ имеет много Votings
. Каждый из них может быть проверен. Поэтому для этого я не думаю, что прямая связь между User
и Voting
является решением.
Вслед обновляется User
, Answer
и Voting
модели с обновлениями ассоциаций:
User < ActiveRecord::Base
has_and_belongs_to_many :surveys
end
Answer < ActiveRecord::Base
belongs_to :question
has_many :votings
end
Voting < ActiveRecord::Base
belongs_to :answer
attr_accessible :value
end
Наконец, несколько других незначительных опечаток, как Answers < ActiveRecord::Base
где класс Answer
не должен быть во множественном числе.
Вторая проблема: у вас есть User
has_and_belongs_to_many
Surveys
.Вы определяете many to many
отношения между User
и Survey
, так что вы должны определить то же самое в вашей Survey
модели, а также:
Survey < ActiveRecord::Base
has_and_belongs_to_many :users
has_many :questions
end
Со всеми этими обновлениями ваши модели наряду с отношениями будет выглядеть следующим образом (Примечание: Я также добавлена accepts_nested_attributes_for
в моделях, так что, когда ваша форма представляет вам не нужно вручную создавать каждый из связанных объектов):
User < ActiveRecord::Base
has_and_belongs_to_many :surveys
end
Survey < ActiveRecord::Base
has_and_belongs_to_many :users
has_many :questions
accepts_nested_attributes_for :questions
end
Question < ActiveRecord::Base
belongs_to :survey
has_many :answers
accepts_nested_attributes_for :answers
end
Answers < ActiveRecord::Base
belongs_to :question
has_many :votings
accepts_nested_attributes_for :votings
end
Voting < ActiveRecord::Base
belongs_to :answer
attr_accessible :value
end
с выше модели relationshp вы могли бы построить свои SurveysController
«ы new
и create
действие будет выглядеть примерно следующим образом:
# app/controllers/surveys_controller.rb
class SurveysController < ApplicationController
def new
@survey = current_user.surveys.build do
@question = @survey.questions.build
@answer = @question.answers.build
# Build three different votings for answer with default value.
[-1, 0, 1].each do |voting_value|
@answer.votings.build(value: voting_value)
end
end
def create
@survey = current_user.surveys.build(params[:survey])
@survey.save
# Of course you would check if save succeeded or failed and take action accordingly.
end
end
Кроме того, я бы рекомендовал вам заглянуть в has_many...through
вместо has_and_belongs_to_many
для определения many to many
отношений.
Пожалуйста, разместите свои модели с определениями отношений. – vee
Модели этого человека могут пролить некоторый свет на ваш http://stackoverflow.com/questions/20612855/redirecting-to-new-page-with-already-existing-records-after-user-login-for-authe –