2013-07-24 37 views
0

我花了一段時間尋找這其中的所有相關數據,但我真的不知道怎麼問我想知道什麼,我覺得這是我最大的問題就在這裏:對如何查看型號

我有以下數據模型:

用戶

has_many :student_groups, dependent: :destroy 

Student_Group

belongs_to :user 
has_many :students, dependent: :destroy 

學生

belongs_to :student_group 

我想查看所有給定用戶的student_groups中的所有學生 - 如何執行此操作?此刻,我的學生#指數路線如下:

student_group_students GET /student_groups/:student_group_id/students(.:format)   students#index 

學生#指數好像把這個邏輯的地方,但它也要求一個student_group_id - 這意味着它只是在給了學生們的指數student_group。基於我的代碼,這是有道理的,但有沒有辦法來覆蓋它的學生#索引視圖?例如,在學生控制學生#index動作,是這樣的:

def index 
    @students = @student_group.all.students 
    ... 
end 

感謝您的幫助!

+0

https://github.com/sferik/rails_admin – Abram

回答

1

試試這個

,那麼你就需要通過URL發送用戶ID。需要定製的routes.rb

@user_group_ids = User.find(params[:user_id]).student_groups.map(&:id) 

@students = Student.where('student_group_id IN (?)', @user_group_ids) 

否則,如果你正在尋找爲當前用戶,然後

@user_group_ids = current_user.student_groups.map(&:id) 

@students = Student.where('student_group_id IN (?)', @user_group_ids) 
+0

第二個完美工作,歡呼 – dax

0

假設你有@user = User.find(params[:id])比試試這個:如果你想獲取一個學生對特定用戶

@students = [] 
@user.student_groups.each |sg| 
    @students << sg.students 
end 
+0

我在那一刻 - 它的工作原理 - 問題是它返回給定學生組中的所有學生。我想要的是屬於所有學生組中的用戶的所有學生 – dax

+0

@dax,因爲學生屬於student_group,其中的所有學生都屬於用戶。 你的問題有什麼缺失嗎? –

1

現在我已經想出了你一個更好的選擇,你可以使用的has_many:通過關聯關係:

User 

has_many :student_groups, dependent: :destroy 
has_many :students, through: :student_groups 

Student_Group 

belongs_to :user 
has_many :students, dependent: :destroy 

Student 

belongs_to :student_group 

現在,您將能夠獲取與任何特定用戶的student_groups這樣相關聯的所有學生:

@user = User.find(params[:user_id]) 
@user.students 

它看起來會更乾淨。謝謝

+0

看看[這個問題](http://stackoverflow.com/questions/17840937/relationship-advice-association-logic-in-rails)我剛剛發佈 – dax

+0

這是最好的在這三種模型中定義關係的方式。 –

+0

對不起,這種方式 - 你說的方式,它的方式[現在](http://i.stack.imgur.com/1d8jC。png)還是[this](http://i.imgur.com/QH3cdUj.png)的方式? – dax