class HouseBuyersController < ...
def my_method
# How could I get here the relevant model name, i.e. "HouseBuyer" ?
end
end
class HouseBuyersController < ...
def my_method
# How could I get here the relevant model name, i.e. "HouseBuyer" ?
end
end
Risposte:
Questo lo farà:
class HouseBuyersController < ApplicationController
def index
@model_name = controller_name.classify
end
end
Questo è spesso necessario quando si astraggono le azioni del controller:
class HouseBuyersController < ApplicationController
def index
# Equivalent of @house_buyers = HouseBuyer.find(:all)
objects = controller_name.classify.constantize.find(:all)
instance_variable_set("@#{controller_name}", objects)
end
end
controller_name.sub('_', ' ').titleize
per ottenere "Acquirenti di case".
new.controller_name.classify.constantize
nella definizione della classe.
Se il controller e il modello si trovano nello stesso spazio dei nomi, ciò che desideri è
controller_path.classify
controller_path
ti dà lo spazio dei nomi; controller_name
non lo fa.
Ad esempio, se il tuo controller è
Admin::RolesController
poi:
controller_path.classify # "Admin::Role" # CORRECT
controller_name.classify # "Role" # INCORRECT
È un po 'un trucco, ma se il tuo modello prende il nome del tuo controller, allora:
class HouseBuyersController < ApplicationController
def my_method
@model_name = self.class.name.sub("Controller", "").singularize
end
end
... ti darebbe "HouseBuyer" nella variabile di istanza @model_name.
Di nuovo, questo presuppone enormemente che "HouseBuyersController" si occupa solo di modelli "HouseBuyer".
Questo non è possibile se stai usando l'MVC predefinito, che il tuo codice non sembra seguire. Il tuo controller sembra essere un modello ma forse hai appena ottenuto un tipo lì. Ad ogni modo, controller e modelli sono fondamentalmente separati in Rails MVC, quindi i controller non possono sapere a quale modello sono associati.
Ad esempio potresti avere un modello chiamato post. Questo può avere un controller posts_controller o potrebbe avere un controller come articles_controller. Rails conosce i modelli solo quando definisci il codice effettivo nel controller come
def index
@posts = Post.all
@posts = Article.all
end
Nei controller standard rails non c'è modo di sapere quale sia il modello.