2016-03-22 5 views
0

Я хочу создать некоторые действия динамически, что-то вроде ниже.Создание действия вне коллекции

Но как код не в методе я получаю следующее сообщение об ошибке: «неопределенная локальная переменная или метод»

Является ли это вообще возможно, и если да - то как?

class Post < ActiveRecord::Base 
    CATEGORIES = [:music,:movies,:art,:jokes,:friends,:whatever].freeze 
end 

class PostsController < ApplicationController 
    Post::CATEGORIES.each do |category| 
    eval <<-INDEX_LIKE_ACTIONS 
     def #{category} 
     @posts = Post.where(category: '#{category}') 
     render :index 
     end 
    INDEX_LIKE_ACTIONS 
    end 
end 

resources :posts do 
    collection do 
    Post::CATEGORIES.each {|category| get category.to_s} 
    end 
end 
+1

Я бы вопрос вашу потребность отдельного метода для каждой категории, если все, что вы делаете, это делает вид индекса. Если это сложнее, то это может потребоваться. – DickieBoy

ответ

2

Вы можете использовать Руби define_method

Post::CATEGORIES.each do |category| 
    define_method category do 
    @posts = Post.where(category: category.to_s) 
    render :index 
    end 
end 
Смежные вопросы