2014-12-16 1 views
0

Я работаю над приложением, которое имеет модель Exercise и я добавил метод трех областей показано ниже:Отображение результатов из областей в рельсах

scope :easy, -> { where(level: "easy") } 
scope :medium, -> { where(level: "medium") } 
scope :hard, -> { where(level: "hard") } 

и у меня есть представление, где я хочу содержимое дисплея зависит на какой метод мы использовали. Например, если я нажимаю ссылку «легко», он должен показывать все упражнения в базе данных, которые легко и т. Д. Но я знаю, как начать.

ответ

1

Подумайте об этом. Классический, подмости генерируется индексный метод, делает это:

def index 
    @exercises = Exercise.all 
end 

Но вам нужно позвонить по одному из них вместо

Exercise.easy 
Exercise.medium 
Exercise.hard 

Вы можете изменить индексный метод, чтобы сделать это:

SCOPES = %w|easy medium hard| 

def index 
    @exercices = if params[:scope].present? && SCOPES.include?(params[:scope]) 
    Exercise.public_send(params[:scope]) 
    else 
    Exercise.all 
    end 
end 

Затем вы переходите к «/ exercies? Scope = easy» или везде, где находится ваш индекс упражнений. Если вы получаете, чтобы понять, что происходит вы можете использовать этот драгоценный камень has_scope, что уменьшает проблему так:

class ExercisesController < ApplicationController 
    has_scope :easy, type: :boolean 
    has_scope :medium, type: :boolean 
    has_scope :hard, type: :boolean 

    def index 
    @exercises = apply_scopes(Exercise) 
    end 
end 

Затем перейти к «?/Упражнениям трудно = истина»

+0

Это звучит очень хорошо, но я Я попытался использовать has_scope, и я дал эту ошибку: «Неизвестный ключ:: boolean. Допустимыми ключами являются:: type,: only,: except,: if,: except,: default,: as,: using,: allow_blank'. Изменить Я использую Rails 4.2.0.rc1. – MC2DX

+1

TYPO! См. Редактирование. – nicooga

Смежные вопросы