Rails 4:如何自定义模型的路由键?

时间:2016-07-08 17:25:31

标签: ruby-on-rails ruby-on-rails-4

我的应用中有CourseQuestion模型。

我在我的控制器中使用redirect_to @discussible,其中@discussible可能属于不同的类(因此重定向到不同的URL)。

但我需要将CourseQuestion模型重定向到question_path,而不是默认的course_question_path

我不需要更改路线(路线很好),只需要轨道来推断模型的特定命名路径。

有什么好办法吗?

2 个答案:

答案 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