• @Rei 嗯,基于各位的讨论,我目前的结论就是,在 rails 的 routes 实现中,并没有将路由信息存储在某个数据结构里,一切都是动态 helper 方法中生成的,因此,也就没有简单进行反查的方法。

    此外,由 member 和 collection 生成的 url,仅是一种约定。换句话说,要使用 params[:id] 的方法进行判定的前提,就是所有定义的路由规则,都遵从这一约定。

  • 这个问题的起因是做一个类似 activeAdmin 的 gem,,希望自动根据当前 action 设定某些允许的 action,比如当前是:show,则允许 [:edit,:delete],反之若是:index,,则只能允许 collection 类的 action。因此需要能自动判定 action 是 collection or member?

    检查 params[:id] 是一个方法,但总感觉有一些局限性,比如/account/profile 之类。我的愿望是,既然我们在编写 route.rb 时已经明确了各类信息,为什么没有一个 api 能够访问这些信息呢?

    比如,我又有一个问题,,如何判定当前的 controller 是单数 (resource) 还是复数 (resources) 资源呢?

  • Kohana 框架,CodeIgniter 的一个分支,,和 rails 的结构十分相仿,, 可以做为从 php 向 rails 的一个过渡,, 不过,最终还是转到 rails 吧,

  • @dotnil 有在 github 托管吗,,现在对做 kissy-rails.js 也很有兴趣,可以一起开发

  • http://github.com/nowazhu/carrierwave-upyun 链接不能访问?库还没放上去?

  • 顺手写了一个 act_as_teaser 的 gem,感觉不是很好,主要是摘要与主体之间的同步问题,晾出来请大家指教如何改进,,,

    使用方法: 在 model 中,

    class Article < ActiveRecord::Base
      # 假设存在:content和:teaser两数据库列,以下DSL指定使用:teaser字段保存:content的摘要,当:content更新时,自动截取生成:teaser
      act_as_teaser :content,:as=>:teaser 
    
    end
    

    模块源码

    module ActAsTeaser
      extend ActiveSupport::Concern
    
      included do
        include ActionView::Helpers::SanitizeHelper 
        include ActionView::Helpers::TextHelper
      end
    
      module ClassMethods
        def act_as_teaser body, opts={}
          teaser = opts[:as] || 'teaser'
          length = opts[:length] || 100
          self.class_eval %(
            protected
            def filter_teaser_#{body}          
              if changed.include?("#{body}") && !changed.include?("#{teaser}")
                self.#{teaser} = truncate(strip_tags(self["#{body}"]),:length=>#{length})
              end    
            end              
          )
          self.before_save "filter_teaser_#{body}".to_sym
        end
      end
    
    end
    
    ActiveRecord::Base.send :include,ActAsTeaser
    
    
  • 社区中似乎没有一个类似名为 act_as_teaser 的 gem,可以使用宏语句为:text 类型的字段,比如 content 字段提供一个 content_teaser 的自动截断版本,并且也允许手工 teaser,,, 是我没找到,,还是不存在? 或许应该花点时间自己写一个 :)