Using ERB in YAML Configuration File

A while back in Railscast #85 Ryan Bates demonstrated how to add a YAML-based configuration file to a Rails application. You start with the configuration file — say RAILS_ROOT/config/app_config.yml — containing your configuration data:

And then you load the file from an initializer — say RAILS_ROOT/config/initializer/load_config.rb — containing the following:

And from then on a Hash named APP_CONFIG will be available throughout your application containing the configuration specific to the environment in which your application is running, i.e., development, test or production.

But what if you want to dynamically configure one or more values in your configuration file? Other YAML files loaded by Rails such as fixture files or database.yml are processed through ERB before being loaded. Wouldn’t it be nice to be able to do the same in your application configuration file?

As it is Rails will not process those ERB snippets, but you can change that with one small change to your initializer:

Now, instead of loading the file directly, YAML loads the string returned by ERB#result which will contain the contents of the app_config.yml after the ERB snippets have been evaluated.

From: http://urgetopunt.com/rails/2009/09/12/yaml-config-with-erb.html

rails中的render,redirect_to和flash

rails中的render和redirect_to我们使用的次数应该很多,写下来算是一个笔记。

首先render是渲染出页面,而redirect_to是跳转。我们写程序有个原则是不要重复造轮子,所以我们如果有一个view模板写出来后经常会有其他的action使用,比如我们写了文章列表的页面模板,然后搜索的页面也用得到,这时使用render来渲染对应的模板,便不用再重写一个搜索的view模板。而redirect_to接受的参数则像link_to,是作为跳转的。而render只可以使用同一个controller的view。

render的时候我们也许会碰到flash的问题。flash是一条信息,用过以后会自动清掉。用法:flash[:message] = "something",它的原理是写入seesion的一段话,用完后删除,但如果我们用的是render,flash是对这个view模板上一直有效的。所以搜索的flash和列表页的flash混在了一起,搜索完切换到列表页发现flash消息还在显示!这时我们可以使用flash.now[:message] = "something",就可以避免此类问题。为什么呢?因为flash.now不是保存在cookie中,而是在request中。

所以一般情况下,flash[:error]和redirect_to一起使用,flash.now[:error]则和render配合使用。

rails rake db:migrate说明

命令 rake db:migrate 作用 将所有未实施的迁移任务都实施到目标数据库上。

命令 rake db:migrate VERSION=编号 作用 指定migrate执行的版本,可用于撤销迁移任务

db:migrate的迁移版本信息可以在所创建的数据库下schema_info表中查看到相关记录信息(这里的记录是migrate的动作版本,也就是db/migrate文件夹下面的文件是否执行过,如果把某条version删除的话,那么这条记录就认为是没有执行过的)。

rake的db任务通常都使用rake db:migrate来升级数据库。实际上,在刚刚开始工作的时候,还可以通过

来创建需要的数据库,而不需要通过mysql界面来手工创建。如果的你的默认环境设置为development,可以不额外指定环境。如果想生成其他环境的,可以修改RAILS_ENV参数到对应的值,如“production”。

继续阅读