2013-05-03 1 views
0

Если у меня есть User, что has_many :problems, предполагая, что я создал необходимую связь между User и Problem, как я могу сделать что-то вроде:Rails - Показать все модели, которые BELONGS_TO этот пользователь

# UsersController.rb 
    def students_problems 
    @userId = params[:user_id] 
    @problems = give me all problems associated with this @userId 
    end 

ответ

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

@problems = @user.problems 

В идеале вы хотели бы сделать это в модели, если вы планируете сделать больше с вашим кодом. Таким образом, вы можете создать модельный метод, подобный этому для вашего контроллера.

@problems = User.name_your_method_here(params[:user_id]) 

Тогда в модели пользователя у вас есть

self.name_your_method_here(user_id) 
    User.find(user_id).problems 
end 

И вы можете добавить несколько условных, чтобы убедиться, что user_id соответствует реальному пользователю, но я оставлю это до вас, чтобы сделать.

EDIT: Как предлагает lebreeze, было бы разумно изменить название метода на что-то другое, по крайней мере, на то, что оно связано с тем, что вы делаете с вашим кодом.

+1

Я бы не рекомендовал использовать переменные экземпляра в методе модели, так как их объем будет протекать. Также, используя метод 'find_problems', в этом случае добавляется ненужное раздувание методам, уже предоставленным ActiveRecord. – lebreeze

+0

Ahh хороший звонок. Я настрою код. По сути дела было показано, что было возможно с помощью модельных методов. Спасибо за предложения. – jason328

+0

Спасибо и за помощь! – Houdini

2

Предполагая, что все ваши ассоциации и поля db являются правильными.

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