用Paperclip上传多个附件

在Rails程序里上传文件你会用什么呢?反正我是用的paperclip,至少它支持Ruby1.9和Rails3。哪个2B再抄我的文章甚至是改我的文章天天夜里和猪爱爱白天一直吃猪粮!

这是tutorial,所以你只需要按照步骤来就能完成一个可运行的DEMO。前提是我用的ruby 1.9.2preview3和Rails 3.0.0.beta4,你可以与我不同,不过我不保证会顺利。

我要说的是Post与Asset之间has_many的association,就是一个Post有很多的Asset。如果你只想要has_one的可以直接参看paperclip的快速入门

准备工作

我们需要一个新的Rails项目weblog,然后添加一个Post

gem install paperclip
rails weblog
cd weblog
rails g scaffold post title:string body:text
rake db:migrate
rails s

好的,访问http://localhost:3000/posts,现在一个简单的blog就完成了。

READ MORE>>

Rails需要一个JSON Builder

说过要写tutorials的,我却发现自己写的东西越来越中国化了,就是很装逼却没实际价值,高手不屑一看,新手看不懂的境界。

于是,我决定以后写的詳細一点。不过在我如此混乱的文字组织下,可能就找不到重点了

我有很多的events,想返回JSON格式,只需要这样写

class EventsController < ApplicationController
  respond_to :json

  def index
    respond_with(@events)
  end
end

Rails很智能,它会自动的使用@events.to_json来返回JSON,大部分时间这就是我想要的,可现在问题出现了。。。

我不喜欢默认的这个JSON,比如我需要给这个JSON加一个值"total":69。如果是XML格式,Rails提供了Builder,可我没找到比较方便的JSON Builder

针对现在小小的需求,可以这样做
READ MORE>>

Rails中STI的RESTful routes问题

不解释,你是知道STI的——single table inheritance,我们看下问题是什么

现在有两个Model:AssetImage

class Asset < ActiveRecord::Base; end
class Image < Asset; end

我们定义了这样一个RESTful routes

resources :assets

然后在我们的AssetsController里面

class AssetsController < ApplicationController
  def create
    @asset = Asset.new params[:asset]
    @asset.save
    respond_with(@asset)
  end

  def update
    @asset.update_attributes params[:asset]
  end
end

READ MORE>>

给Rails程序添加主题切换功能

都明白是什么意思的,比如像Wordpress一样的主题切换,或者说皮肤?不管怎么个叫法,在Rails里实现这种功能是很简单的。

我最近在做Android开发,我们的团队需要一个门面吧,继续使用我自己的博客程序,它可是支持主题切换功能的哟。看我为植物人新做的一个主题

eskit theme for lifeblock

READ MORE>>

Ruby 1.9强大的编码问题

如果你用Ruby 1.9不会没有遇到过编码的问题吧,Ruby 1.9支持强大的m17n,强大到我一开始接触它都要疯掉了。。。

作为一个好屁民我决定把我的痛苦经历写一写,毕竟我还没见过这方面的中文介绍。Ruby是一种很特别的语言,Ruby 1.9更是个神奇的存在。我是用Ruby 1.9后才知道还有m17n这一说法的,看来我太寡聞了么

我遇到的错误,相信你也遇到过,除非你都用的ASCII码或者你比Ruby更怪

ActionView::Template::Error (incompatible character encodings: ASCII-8BIT and UTF-8)

伟大的革命精神是怎样的?克服一切困难,没有问题也要制造问题然后解决它。解决问题之前,先来介绍一点Ruby 1.9 encoding的处理方式。

谈到编码,自然就要讲字符串,Ruby 1.9中的字符串不是一个人,他已经被编码附体了!

一个String对象不仅包含着一般意义上的字符串,还有一个Encoding对象与它关联

irb(main):014:0> s = '中文'
=> "中文"
irb(main):015:0> s.encoding
=> #<Encoding:UTF-8>

READ MORE>>

移动化我的Blog

感觉移动化这个词好别扭啊,我用这个词的意思是让我的Blog更适合用手机等移动设备阅读,用你的Android手机或iPhone访问看一下吧。

要将一个Rails程序mobilize是很简单的,我们开始吧

Controller需要一个before_filter

把下面的代码作为before_filter加入到一个合适的Controller中,合适的标准是什么呢?我也不太清楚了,或许你可以加在ApplicationController

def detect_browser
  if params[:format].blank?
    unless session.has_key? 'mobile'
      agent = request.headers["HTTP_USER_AGENT"].downcase
      session[:mobile] = agent.match(MOBILE_BROWSERS) ? 'true' : 'false'
    end
    params[:format] = 'mobile' if 'true' == session[:mobile]
  elsif 'mobile' == params[:format]
    session[:mobile] = 'true'
  elsif 'html' == params[:format]
    session[:mobile] = 'false'
  end
end

READ MORE>>

EsKit使用指南

EsKit是一个基于Ruby on Rails的博客系统,嗯,ABitNo造的轮子。一些特点可以参见上一篇文章:低调发布我的 Blog程序

或许你只是需要尝试一下,我为大家部署了一个Demo,你就尽情蹂躏它吧
这里是后台地址:http://eskit.abitno.me/admin
用户名:admin, 密码:rubyonrails

感觉不错吗?想学习Rails?或者想测试下Rails 3写出来的程序?亲自部署一个试试看吧!你的每一次部署都是对俺的支持啊!!你能因此喜欢上Rails我会开心死的!!!假如EsKit让你对Rails开始反感,千万不要告诉我,我喜欢听好听的--囧

安装Ruby

开发使用的ruby 1.9.1p378,还没对其他ruby版本进行测试,推荐你也安装此版本吧,会少些问题,这里是官方FTP ftp://ftp.ruby-lang.org/pub/ruby/1.9/

Linux的源里一般都有这个版本,你要真找不到就到ftp上下载解压,然后

./configure --prefix=/opt/ruby191
make
sudo make install

READ MORE>>