2016-01-24 3 views
0

В моей викторине проект Rails, у меня есть таблица для «Участие», в которой хранится информация о пользователе, категории викторины и рейтинг викторины после того, как пользователь завершил тест.Показать содержимое таблицы, но ограничено теми, кто соответствует зарегистрированному пользователю

class CreateParticipations < ActiveRecord::Migration 
    def change 
    create_table :participations do |t| 
    t.references :user 
    t.string :category 
    t.boolean :finished, default: false 
    t.integer :current_question_index, default: 0 
    t.integer :score, default: 0 

    t.timestamps 
    end 
end 

конец

В моей user.rb, я указываю ассоциацию, что пользователь has_many :participations, который позволяет пользователю воспроизводить несколько викторин при сохранении категории/баллы в таблице.

Если я хочу показать пользователю таблицу его результатов (так что верните все результаты участия, но только для тех, которые соответствуют пользователю) в представлении, могу ли я вызвать это без создания нового контроллера?

+0

Как делает «Участие» ассоциируется с «Quiz»? –

ответ

2

Вы можете просто сделать, как показано ниже

#in the controller action 
@user_participations = Participation.where(user_id: current_user.id) 

и просто вызвать @user_participations в представлении.

-1
Users controller 
    has_many :participations 

    def participations 
    @user = User.find(params[:id]) 
    @participations = @users.participations.build(params[:participation_id]) 
    end 

end 

ParticipationsController 
    belongs_to :user 

В маршрутах файл, вы можете создать маршрут по GET 'users/:id/participations', to: 'users#participations', as: 'user_participations'

Это даст вам user_participations_path маршрут Так что если вы хотите, чтобы ссылка на него можно добавить <% = link_to «Показать пользователя игры!», user_participations_path (@ participations.user)%>

Тогда в мнений/пользователей/участий

<% @participations.each do |participation| %> 
    <%= participation.inspect %> 
<% end %> 

Дайте мне знать, как вы идете!

EDIT

Пожалуйста, не то, что has_many и belongs_to деклараций должны быть в моделях user.rb и participation.rb соответственно. Спасибо @richpeck за сбор ошибки.

+0

Мне пришлось сбивать, потому что вы включили 'has_many' в контроллер –

+0

Ahh спасибо за подбор @richpeck. Я отредактирую его – RuNpiXelruN

1
#config/routes.rb 
resources :users do 
    resources :participations, path: "results", only: :index #-> url.com/users/:user_id/results 
end 

#app/controllers/participations_controller.rb 
class ParticipationsController < ApplicationController 
    def index 
     @user = User.find params[:user_id] 
     @participations = @user.participations 
    end 
end 

#app/views/participations/index.html.erb 
<% @participations.each do |participation| %> 
    <%= participation.score %> 
<% end %> 

-

Если у вас есть associations настроен правильно, вы должны использовать ассоциативный метод (@user.participations), который будет в основном делать то, что Pavan предложил:

#app/models/user.rb 
class User < ActiveRecord::Base 
    has_many :participations 
end 

#app/models/participation.rb 
class Participation < ActiveRecord::Base 
    belongs_to :user 
end 
Смежные вопросы