J'ai un formulaire imbriqué qui est basé sur le modèle suivant - Une leçon a beaucoup de questions, chaque question a beaucoup de réponses, et les réponses appartiennent aux utilisateurs .Rails Forme imbriquée - Filtrer par utilisateur actuel, questions-réponses-utilisateurs
Je développe un formulaire imbriqué, de sorte qu'un nouvel utilisateur puisse revoir les questions et poster des réponses. Si un utilisateur a entré des réponses dans le passé, je veux que celles-ci apparaissent; sinon afficher les champs vides. Je ne veux pas non plus que l'utilisateur voie les réponses de quelqu'un d'autre. Donc, je n'arrive pas à comprendre comment afficher uniquement les réponses pour l'utilisateur actuellement connecté. J'ai créé un named_scope, mais cela ne fonctionne pas (voir mon action d'édition). À l'heure actuelle, lors de l'édition, je vois les réponses pour tous les utilisateurs sous chaque question. Pour créer la vue, j'ai suivi l'exemple de formulaire imbriqué de Railscast 196.
Nous vous remercions de votre aide. Voici le code montrant mes modèles et le contrôleur de leçons.
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
Y at-il un moyen d'ajouter un filtre au modèle? Je voudrais pouvoir mettre à jour mon modèle Question pour dire has_many: réponses,: conditions => ["user_id =?, Current_user.id] <- je réalise que current_user n'appartient pas au modèle. J'ai dans ce cas? – Alex