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
Câu trả lời:
Điều này sẽ làm điều đó:
class HouseBuyersController < ApplicationController
def index
@model_name = controller_name.classify
end
end
Điều này thường cần thiết khi trừu tượng hóa các hành động của bộ điều khiển:
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
để có được "Người mua nhà".
new.controller_name.classify.constantize
trong định nghĩa lớp.
Nếu bộ điều khiển và mô hình của bạn nằm trong cùng một không gian tên, thì điều bạn muốn là
controller_path.classify
controller_path
cung cấp cho bạn không gian tên; controller_name
không.
Ví dụ: nếu bộ điều khiển của bạn
Admin::RolesController
sau đó:
controller_path.classify # "Admin::Role" # CORRECT
controller_name.classify # "Role" # INCORRECT
Đó là một chút hack, nhưng nếu mô hình của bạn được đặt tên theo tên bộ điều khiển của bạn thì:
class HouseBuyersController < ApplicationController
def my_method
@model_name = self.class.name.sub("Controller", "").singularize
end
end
... sẽ cung cấp cho bạn "Người mua nhà" trong biến phiên bản @model_name của bạn.
Một lần nữa, điều này tạo ra một giả định lớn rằng "HouseBuyersController" chỉ giao dịch với các mô hình "Người mua nhà".
Điều này không thể thực hiện được nếu bạn đang sử dụng MVC mặc định mà mã của bạn dường như không tuân theo. Bộ điều khiển của bạn có vẻ là một mô hình nhưng có thể bạn chỉ có một loại ở đó. Dù sao, bộ điều khiển và mô hình về cơ bản được tách biệt trong Rails MVC nên bộ điều khiển không thể biết chúng được liên kết với mô hình nào.
Ví dụ, bạn có thể có một mô hình có tên bài đăng. Điều này có thể có một bộ điều khiển posts_controller hoặc có thể có một bộ điều khiển như article_controller. Rails chỉ biết về các mô hình khi bạn xác định mã thực trong bộ điều khiển, chẳng hạn như
def index
@posts = Post.all
@posts = Article.all
end
Trong bộ điều khiển tiêu chuẩn rails không có cách nào để biết mô hình là gì.