У меня есть вложенная форма, основанная на следующей модели: урок состоит из множества вопросов, каждый вопрос имеет много ответов, и ответы принадлежат пользователям.
Я разрабатываю вложенную форму, чтобы новый пользователь мог просматривать вопросы и публиковать ответы.Если пользователь вводил ответы в прошлом, я хочу, чтобы они отображались;в противном случае показывать пустые поля.Я также не хочу, чтобы пользователь видел ответы других пользователей.
Итак, я не могу понять, как показать только ответы для текущего пользователя, вошедшего в систему.Я создал named_scope, но он не работает (см. Мое действие по редактированию).Прямо сейчас, при редактировании, я вижу ответы для всех пользователей под каждым вопросом.Для построения представления я следовал примеру вложенной формы из Railscast 196.
Спасибо за вашу помощь.Вот код, показывающий мои модели и контроллер уроков.
class Lesson < ActiveRecord::Base
has_many :questions, :dependent => :destroy
accepts_nested_attributes_for :questions, :allow_destroy => true,
:reject_if => proc { |a| a['data'].blank? }
end
class Question < ActiveRecord::Base
belongs_to :lesson
has_many :answers
accepts_nested_attributes_for :answers,
:reject_if => lambda { |a| a['data'].blank? }, :allow_destroy => true
end
class Answer < ActiveRecord::Base
belongs_to :question
belongs_to :user
named_scope :by_user,
lambda {|user| {:conditions => ["user_id = ?", user]}}
end
class User < ActiveRecord::Base
has_many :answers
accepts_nested_attributes_for :answers,
:reject_if => lambda { |a| a['name'].blank? }, :allow_destroy => true
end
LESSONS Controller:
def edit
@lesson = Lesson.find(params[:id])
if current_user_admin == 99 # show blank question field if admin user
@questions = @lesson.questions.build(:user_id => current_user)
end
@lesson.questions.each do |question|
# if there are no answers for this user
if question.answers.by_user(current_user.id).size != 1
# if the current user is not admin
if current_user_admin != 99
question.answers.by_user(current_user.id).build(:user => current_user)
end
end
end
end