我的应用中有CourseQuestion
模型。
我在我的控制器中使用redirect_to @discussible
,其中@discussible
可能属于不同的类(因此重定向到不同的URL)。
但我需要将CourseQuestion
模型重定向到question_path
,而不是默认的course_question_path
。
我不需要更改路线(路线很好),只需要轨道来推断模型的特定命名路径。
有什么好办法吗?
答案 0 :(得分:1)
我已经完成了某些事情,但不知何故感觉就像是黑客会覆盖模型的model_name方法。
在你的情况下,你可以这样做:
class CourseQuestion
def self.model_name
ActiveModel::Name.new(self, nil, "Question")
end
# if your course_question belongs_to :question, to prevent some unwanted bugs, where course_questions/25 would map to questions/25, add a to_param method that returns the id of the question, as such
def to_param
question_id.to_s # Be sure to stringify the id for routes
end
end
答案 1 :(得分:0)
包含在模型中的可疑模块,仅更改#route_key
和#singular_route_key
方法:
module DemodulizedRouteKeys
extend ActiveSupport::Concern
class_methods do
def model_name
## this would demodulize all namings:
# ActiveModel::Name.new self, nil, super.name.demodulize
super.tap do |name|
route_key = name.name.demodulize.underscore
name.define_singleton_method(:route_key) { route_key.pluralize }
name.define_singleton_method(:singular_route_key) { route_key }
end
end
end
end