• @help5305fff , see you~~

  • 惨啊,搬家断了网。到现在才在朋友家上线了。报个名啊~~~

  • -> 是关键字吗? at 2012年03月30日

    ruby 1.9.x 里:p = ->(x){ x + 1}等同于p = lambda {|x| x+ 1}

  • inherited_resources 已经在 README 里已经放出了deprecation notice了,直接推荐使用 responders.

    **Deprecation notice**
    Since Rails 3 came out, I have no longer used Inherited Resources. I have found that the responders abstraction and custom Rails generators offer the perfect balance between hiding and showing too much logic. That said, I suggest developers to make use of the responders gem (at github.com/plataformatec/responders) and no longer use Inherited Resources.
    
    
    
  • views 若真的不想复写,可以通过 render 的方式来避免. 按你的例子,如果你想复用 topics 的 show 页面,可以在 movies/show.html.erb 中直接 render :file => 'topics/show'.

  • X~~~ 现在才发现是一个月前的问题! 应该早就找到解决办法了吧。:)

  • active admin 现在有没有内置的这种功能我不知道呢。 我有个项目用的 active_admin + paperclip 来做的多图片上传。 用户在上传产品之前你并不知道他想传多少张图上去。 因此,默认生成 3 file fields for uploading image. 后台有个“add new image" 按钮,点击后即可添加一个新的图片上传选择框。 active admin 的 form 是自动生成的。这种情况下,可以 render 那个用于添加上传图片的 Snippet. ActiveAdmin.register Post do form :partial => "form" end 而后即可在 app/views/admin/posts/_form.html.erb 就可以随意编写这个 Form.在这里就可以随意写,就像你平常使用 rails form,使用 simple_form 之类的也可以。 到了这一步,就可以脱离 active admin 随意按以前的方案来写了。 至于像我之前那个使用“add new image“添加还是直接拖图片上传。就是 js 怎么写的问题了。再去 google 的时候,就不用再以 active_admin 为前缀了。这里可搜索到的解决方案应该是大把大把地...

  • #18 楼 @reducm ,你当时应该回答说:"我是面对傻瓜编程的。"

  • Try this:

    ActiveAdmin.register_page "My Page" do
    
        action_item do
          link_to "View Site", "/"
        end
    
        content do
          para "Hello World"
        end
      end
    
    

    Check the Document:http://www.activeadmin.info/docs/9-custom-pages.html#add_an_action_item

  • #3 楼 @nightire ,@files = Dir.glob("*"),测试过了。木有问题啊。可以考虑设置一下绝对路径。 如 Dir.glob("#{Rais.root}/app/views"); 具体参见:http://ruby-doc.org/core-1.9.3/Dir.html#method-c-glob

  • 我写的第一个网站程序也是个论坛。PHP,照着书写的。 因为是个文科生,课余时间自学。 不知道 IDE,不知道编辑器。 书上说可以用 windows 自带的 notepad。 于是我就用记事本来搞。 HTML, php, SQL 语句混杂在一起。逻辑一层套着一层。 ...木有语法高亮,木有自动对齐,木有自动补全... 结果还真搞出来了。 那真是个吐血三升的时代。

  • 使用继承是出于这样一种考虑: 我个人在做些小公司的项目时,经常会碰到的事情是 products,supports,news,serivces 之类的 resources 都会有其分类。 category 只有一个 name 字段,一个 position 字段,为每一种资源新建一个 scaffold,如为 products 新建 ProductCategory.这样会成生大量的重复的 MVC 文件,实在是不可忍。 因此,出于 rubist 的本能,选择的是将它们全部 blongs_to 到 category。这时就会发现查找时会有困难。比如说,新建 products 页面时,一般会提供一个下拉框给用户选择 product 所属的类。这个下拉框里的可选 categories list 应当如何查找生成?

    同时还有多级分类的问题。比如说,产品要分为一级分类,其下有二级分类,再往下....。当然,这样相当不好。但是往往会碰到这样的要求。 于是只有去对 category 做 self join...

    ....呃,说着说着我自己都觉得有点乱了。:)

  • 应该是以rails g controller cpanel::topics xxx:string xxxx:integer的形式生成的吧。当然,具体的逻辑还是得自己去 controller, routes 里去修改。

  • #5 楼 @Rei ,我帖上我的解决方案吧。我是先用这个方案解决了问题。连帖子都写好了。准备帖在分享栏的。但是想想觉得太丑陋了。于是才发帖问有没有通用的解决方案的:

    Mongoid + Rails STI(Single Table Inheritance)

    Models

    class Category
      include Mongoid::Document
      field :name
      has_many :products
      has_many :pages
    end
    
    class Pagecategory < Category
    end
    
    class Prodcategory < Category
    end
    
    class Page
      include Mongoid::Document
      field :name
      field :content
      belongs_to :category
    end
    
    class Product
      include Mongoid::Document
      field :name
      field :description
      belongs_to :category
    end
    
    
    
    
    

    Prodcategory 继承自 Category, 创建 Prodcategory 实例后,会将其在座存储于 Category 表中。同时在 Category 表中添加 _type 对象。

    mongoid.org 的描述如下:An additional attribute _type is stored in order to make sure when loaded from the database the correct document is returned. 详情参见http://mongoid.org/docs/documents/inheritance.html

    Prodcategory.create(name: 'product category 1')在 mongodb 中实际保存在 Category 表中,其_type 为'Prodcategory'.

    这时,没有必要专门去创建 prodcategories_controller.rb 与 pagecategories_controller.rb 以及相应的 views。 所要做的事情是对 routes.rb , views/categories/_form.html.erb 及 controllers/categories_controller.rb进行一些修改。

    修改后的 routes.rb

    resources :pages
      resources :products
      resources :categories
      resources :prodcategories, :controller => "categories",:_type => "Prodcategory"
      resources :pagecategories, :controller => "categories",:_type => "Prodcategory"
    
    
    
    
    

    修改后的 views/categories/_form.html.erb

    <%= simple_form_for(@category) do |f| %>
    <%= f.error_notification %>
      <div class="form-inputs">
        <% if f.object.new_record? %>
          <%= f.object._type = params[:_type] %>
        <% end %>
        <%= f.input :_type, :collection => [['Default Category','Category'],['Product Category','Prodcategory'],['Page Category','Pagecategory']], :include_blank => false %>
        <%= f.input :name %>
      </div>
      <div class="actions">
        <%= f.button :submit %>
      </div>
    <% end %>
    
    
    

    进行了部分修改的 controllers/categories_controller.rb

    def update
      @category = Category.find(params[:id])
      _s = @category.class.to_s.downcase #更改params upload的hash名.
      respond_to do |format|
        if @category.update_attributes(params[_s]) #upload it!
          format.html { redirect_to @category, notice: 'Category was successfully updated.' }
          format.json { head :no_content }
        else
          format.html { render action: "edit" }
          format.json { render json: @category.errors, status: :unprocessable_entity }
        end
      end
    end
    
    
    
    
    

    在原来的基础上添加了:_type 字段的下拉选框

    <%= simple_form_for @category do |f| %>
    <%= f.error_notification %>
      <div class="form-inputs">
        <% if f.object.new_record? %>
          <%= f.object._type = params[:_type] %>
        <% end %>
        <%= f.input :_type, :collection => [['Default Category','Category'],['Product Category','Prodcategory'],['Page Category','Pagecategory']], :include_blank => false %>
        <%= f.input :name %>
      </div>
       <%= f.button :submit %>
    <% end %>
    
    
    
    
    

    Done!

    举例来说: 这时,通过prodcategories/new即可直接创建 Prodcategory 的实例。 新建的实例可以通过 Prodcategory 来查找,访问。 如新建 product 时,可以使用这样的 Form:

    <%= simple_form_for(@product) do |f| %>
      <%= f.error_notification %>
      <div class="form-inputs">
        <%= f.input :category_id, :collection => Prodcategory.all, :include_blank => false %>
        <%= f.input :name %>
        <%= f.input :description %>
      </div>
      <div class="form-actions">
        <%= f.button :submit %>
      </div>
    <% end %>
    
    
    
    
  • #2 楼 @Rei ,如何设置这个_type?在 form 中添加:_type 字段? 我自己有做过一个方案,用的就是这个:_type. 要求是达到了。但是,觉得代码相当丑陋。既然 mongoid 做了相应的设置,应该有些简单明白的解决方案吧。

  • @_@ 一沉到底了?

  • 呃,默认的 dns,自己指定的 DNS 服务等等等都不成。 再有就是 google 的 dns 肿么了?

  • @_@, 杯具啊。我这边直接访问不了。而后换 google 的 DNS 后还是不行。翻出墙外之后才可以访问~~~

  • 如何把握 DRY 的度? at 2012年03月20日
  • 如何把握 DRY 的度? at 2012年03月20日

    @_@ ,唔?那我得好好研究一下。有时,木有时间磨刀就被赶去砍树了。 隔段时间回头看自己的代码,总是觉得惨不忍睹。

  • 如何把握 DRY 的度? at 2012年03月20日

    #1 楼 @fredwu ,你的 angel_nest 里的 gem inherit_resources,感觉上不好把握。

  • 如何把握 DRY 的度? at 2012年03月20日

    #1 楼 @fredwu ,有没有好的学习资料或者案例推荐一下?routes 与 controller 的 inheritance 和 composition 技巧木有怎么接触过,感觉有点茫然。

  • 这哥儿们是机器么 at 2012年03月20日

    在测试自动提交的程序?

  • #2 楼 @ywencn ,Thank you ,应该就是这里的问题了。 美国的 VPS 主机,上传平均 150M 的文件,还是通过浏览器,真是蛋疼啊。

  • client_max_body_size?

  • 外放木马,将 360 也不会用的傻 X 们感染了。让肉鸡们替你访问增加点击。作为报酬,你顺便帮他们把浏览器升级到 IE8...

  • 若非是send_file?

  • #27 楼 @ichord 只是在深圳工作,租了个家在深圳而已。

  • 我大学读的新闻传播专业,细分来说,是广告专业。09 年毕业后没做过任何与广告相关的东西。凭着自学的一点 html+css 基础进了深圳一家做网站开发的公司打杂。半年后离开,进了一家外贸易公司,继续打杂。新工作相对轻松,于是自学了 ROR,用 ROR 给公司开发了两个网站。现在辞职了,宅在家里学技术...说来还真是有点悲苦~~~