2010-10-21 38 views
1

我有一個是基於以下模型嵌套形式 - 一個教訓,有許多問題,每個問題有很多答案,和答案屬於用戶。Rails的嵌套表格 - 由當前用戶篩選,課程疑問的解答,用戶

我開發一個嵌套形式,使新用戶可以查看問題和後答案。如果用戶過去輸入了答案,我希望這些答案出現;否則顯示空白字段。我也不希望用戶看到其他人的答案。

所以,我無法弄清楚如何只顯示當前登錄的用戶的答案。我創建了一個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 
+0

有沒有辦法到過濾器添加到模型?我希望我可以更新我的問題模型來說has_many:answers,:conditions => [「user_id =?,current_user.id] < - 我意識到current_user不屬於模型。在這種情況下,有 – Alex 2010-10-22 21:44:27

回答

0

該命名範圍看起來應該適用於我。您確定數據庫中的回答記錄是否正確設置了user_id

我認爲你在reject_if拉姆達獲得哈希有是字符串而不是符號,以便您的嵌套模型字段可以靜靜地被拒鍵。

+0

謝謝馬特我修正了reject_if語句,代碼仍然不起作用,也許有人可以指點我的例子,我喜歡Ryan的railscast 196創建調查,但它缺少一個我需要一組用戶來創建課程和問題,然後用另一個來回答這些問題。 – Alex 2010-10-21 19:39:10

0

Iv發現您的控制器中的代碼有問題。您正在每個塊中構建一個答案對象,該答案對象遍歷答案,只有當答案爲零時,這個答案永遠不會發生。

我想你你想在你的控制器做的是一樣的東西:

def edit 
    @lesson = Lesson.find(params[:id]) 
    @lesson.questions.each do |question| 
    if question.answers.by_user(current_user.id).empty? 
     question.answers.build(:user => current_user) 
    end 
    end 
end 
+0

嗨馬特,謝謝你的幫助,但它不能解決我的問題。當我去編輯課程時,我仍然可以看到答案對於其他用戶,不僅僅是當前登錄的用戶,我發佈了更新的代碼。 – Alex 2010-10-22 21:49:13