2016-03-22 1 views
0

Je veux créer des actions de manière dynamique, quelque chose comme le suivant.Créer des actions hors de la collection

Mais comme le code est dans une méthode que je reçois l'erreur suivante: « variable locale définie ou méthode »

Est-ce possible, et si oui - comment?

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

Je doute votre besoin de méthode distincte pour chaque catégorie si tout ce que vous faites est rendu sur l'index. Si c'est plus compliqué que cela, alors cela pourrait être nécessaire. – DickieBoy

Répondre

2

Vous pouvez utiliser define_method Ruby

Post::CATEGORIES.each do |category| 
    define_method category do 
    @posts = Post.where(category: category.to_s) 
    render :index 
    end 
end