2016-03-22 8 views
0

Ich möchte einige Aktionen dynamisch erstellen, etwa wie folgt.Erstellen Sie Aktionen aus der Sammlung

Aber wie der Code ist nicht in einer Methode, die ich die folgende Fehlermeldung erhalten: „undefiniert lokale Variable oder Methode“

Ist das überhaupt möglich ist, und wenn ja - wie?

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

Ich würde Ihre Notwendigkeit für separate Methode für jede Kategorie in Frage stellen, wenn alles, was Sie tun, um die Indexansicht ist Rendering. Wenn es komplizierter ist, dann könnte es notwendig sein. – DickieBoy

Antwort

2

Sie können Rubys define_method

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