Rails 怎样使的 routes.rb 在数据库可配置

flowerwrong · 2014年07月08日 · 最后由 flowerwrong 回复于 2014年07月08日 · 2009 次阅读

我的需求是 routes.rb 里面的内容可在界面直接配置,例如/articles/1 => /about,方案倒是有,直接读写 routes.rb!!!有没有接口实现数据库可以配置 routes.rb.谢谢。

这不是你的需求,只是你认为能满足你真实需求的一个手段,把你的真实需求说出来。

X-Y problem

我觉得你不如在开源 CMS 上做二次开发,或者至少可以研究一下他们是怎么处理的。

#1 楼 @blacktulip 就是最直接的需求了,广一点说就是实现一个高度可配置的 CMS.

#3 楼 @yanhao rails 的 CMS 有推荐吗?php 和 java 的我倒是知道不少,rails 的一个也没接触过。

没试过。应该可行吧。要么你试试这样

#routes.rb
  ClientModel.pluck(:model_name).each |model|
    resource model.pluralize.to_sym
  end

CMS 我就知道有 RefineryCMS, RedCouch

#6 楼 @billy 我也觉得这方法貌似靠谱,下班回去试试

你可以研究一下 rails 源代码的 route 的工作原理,然后跟数据库结合就可以了

get '*path', to: 'page#show'
def show
  @page = Page.find_by path: params[:path]
end

@Rei 这个好。

#9 楼 @Rei 感觉这样还是局限,能不能有一个 Route 的 model,然后里面就是映射关系,这样在 routes.rb 里面直接循环调用。

Example::Application.routes.draw do
  ActiveAdmin.routes(self)

  devise_for :admin_users, ActiveAdmin::Devise.config
  #以上是activeadmin和devise的
  Routes.all.each do |route|
    # puts route here???
  end
end

Rei 的方法灵活性已经很高了啊,随你怎么定义 model,在 page#show 里面,都可以自己处理来实现。为啥一定要纠结在 routes.rb 里面。。。

#12 楼 @dorentus 恩,是我想得太局限了,这样设计表。例如有 Page,Article,Blog,Video 四个 model 需要灵活配置,那么给他们一个外键,在 Path 这个 model 里面一对一。然后在一个统一的处理灵活配置的接口里面,例如 Page#show,这样使用Path.find_by_path(params[:path]),然后对应到不同 model

需要 登录 后方可回复, 如果你还没有账号请 注册新账号