作者归档:船长

越剧中的可爱人物

看过了不少越剧. 喜欢上了越剧里面的一些人物. 我把这些人物的名字和演员的名字记下来, 以防止以后忘了这些可爱的人.

《五女拜寿》
邹士龙(茅威涛)
热心,可爱
翠云(何赛飞)
风雪中忍饿受冻为主人乞食, 不是女儿, 比女儿孝顺.

《司马相如与卓文君》

司马相如(夏赛丽)
乐观,有才有情, 忠一, 忠心, 为民
卓文君(何赛飞)
爱的就是司马相如, 不听父命另嫁郎
有主见, 敢爱就爱的卓文君私奔随情郞, 保命留情改写<梁祝>悲剧
乐观, 对丈夫信任

《玉蜻蜓》
申元宰(王君安)
一子愿养三母.知书达理, 孝顺

《风雨渔樵》
(好酷的脚本)
刘玉仙(华怡青)
关心他人, 明理, 坚强
(朱买臣泼水后她说的话好酷.)
平常心境平常过,疏疏淡淡对坎坷
弱女不服命, 伤痛自己抚

《盘妻索妻》
刘仁元(郭丽英)
英雄救美, 又成人之美, 将救来的美女做媒给同学, 可见热心之真纯.

《碧玉簪》
李秀英(金采凤)
再三拒风寇, 对虽然已经成了状元的丈夫的人性看得透彻
无奈受世俗伦理影响, 最后接寇也是不得已的出路.

《陈三两》
陈三两(黄依群)
身在风尘, 心系黎民
住在青楼却传教高尚人品

《卖油郎》
卖油郎(毕春芳)

忠厚热心的卖油郎, 这也是毕春芳舞台形像的化身.

《情洒罗山》
李良臣(钱惠丽)
不羡皇宫千佳丽, 只望得与妻相守一生

《紫玉钗》
崔允明(章瑞虹)
为朋友两肋插刀,当在所不辞

《追鱼》
鲤鱼(王文娟)
可爱还须要理由吗?

《柳永与虫娘》
虫娘(王桂萍)
识柳永奇才, 说行行出状元,劝柳永放弃功名, 把自己的兴趣做成事业, 见解大胆.
为琴献身, 为情献身, 即便失身真节在, 青楼女原是如此明白人.
晏殊(裘巧芳)
二万金钱青楼沽笑, 只为成人之美.

发表在 越剧柔情 | 留下评论

论 重庆女大学生靠色情服务月入可超2万

新闻原文:不久前,《新京报》披露了重庆市警方破获一起女大学生从事色情服务的消息。据警方掌握的情况,重庆目前约有近百家此类公司,招募为数不详的女大学生从事色情服务。涉案的女大学生多供职于各类伴游、商务咨询公司、商务俱乐部,实质从事着三陪、卖淫活动。该案牵涉当地数所院校,一些从事色情服务的女大学生月收入超过2万元。
论 重庆女大学生靠色情服务月入可超2万

女大学生在色情场所吃香且价格畸高,是一种让人感到苦涩不堪的“知识经济”。那些乐于在女大学生面前大把大把甩钞票的人,他们所购买的,除去女大学生与其他女性无甚差别的生理方面服务外,还有女大学生相对比较高雅的谈吐和修养。

如果你是卖身的?
长于人生长远规划方面考虑, 我介意你马上找一所三流大学就读. 最好是艺术学院, 外语学院次之. 现在只要有钱基本上就能进大学, 或能跟校长发生关系更好. 不要在乎这付出, 因为进去后你身价倍增, 你的投资马上就能收回.

但是, 为什么要卖身呢?
除此了女大学生希望了解社会,证明自己的成熟或报复与惩罚心理,或寻求慰藉等原因外, 更主要的原因是钱.
一者社会变革,思想上人对性价值观的改变. "性解放"让女人不再守节, 男人不再忠一. "洁身自爱"不但得不到表扬, 而且可能受人嘲讽. 二来社会上物质和金钱的作用越来越大. 人们开始明白金钱不但可以换来生活日用品, 还可以换得学位, 官职, 爱情甚至生命. 有了这两者, 中间加性可以互换金钱(性<=>金钱), 出现女大学生"献身"色情服务可谓"全情全理","天经地义".

活生生的性交易实录 –“他说要帮我找工作”
文慧(化名)是重庆某大学2000级大学生,即将毕业离校。

"我出生在吉林农村,家里很穷,我父母都是很好很老实的人,母亲很多年没有穿过新衣服,父亲不抽烟不喝酒也不赌博,他们只是没有谋生技能而已,所以,我不管走到什么样的境地,都觉得没有任何怪罪他们的理由。换句话说,我是咎由自取。"

"从小我就比别人长得好看,我有北方农村少见的白皮肤,父母因此很疼惜我,很少让我干家务活。我在村里上小学,在镇上上初中,在县城里上高中,我的外号就从“村花”变成“镇花”再变成“县花”。高一的时候,我自编的独舞还在学校汇演中得了一等奖。"

……..

"辛苦读完四年大学. 你不知道有多少人都在等一份工作,最后发现原来一家小公司的小文秘都需要重点本科英语六级容貌俏丽身高165厘米以上,最后说薪水不过800元,还有几乎上百人排队等面试。这本来就是一个投机的社会,我总要活下去。"

"大四下学期,朋友给我介绍了一个所谓的作家,我看过他的东西,文采平平,用《像鸡毛一样飞》里面的台词来说,“十年以前是个新人,十年以后还是个新人”,喜欢自吹自擂,认为自己才高八斗。我很配合,装作很崇拜的样子,其实每次听到他千篇一律的演讲词,我就觉得好笑。 "

"他说他要帮我找工作。 "

"有一天傍晚,他给我打电话说帮我找了一家外地的杂志社,说里面的那个主任以前是他的学生,小说都是跟他学的。我可以进去先在杂志发行部做着。他在电话中一再强硬让我马上过他那里去一趟,说要跟我细谈。他老婆回娘家去了,他给我收拾了客房,很正人君子的样子。我不动声色,看他能支撑多久。结果我睡了不到10分钟,他敲门进来,手里托着围棋,说要跟我切磋一下。 "

"我知道他心里在想什么,因为我的烂技术竟然把他杀得溃不成军,可见他的心思根本不在棋上。他鬼祟得让我觉得可悲。"

—-"最后事情发生了吗? "

"发生了。很可笑,是我提出来的,我看见他那个样子,觉得他比我好不到哪儿去。 "

—–"工作的事情怎么样?"

"没有回音,所谓的杂志社主任,看起来根本不买他的账,推托得很明显。其实看他那样子,我就知道事情没有他说得那么轻巧。现在我已经绝望了,我觉得我所托非人,因此得不偿失。"

—–"如果下一次有人能确实解决你的问题,而需要你付出身体,你会不会答应?"

"也许会。得到一些东西,总要付出一些东西,而除了身体我什么都没有,我只能拿它去换. "

23岁不到,言语中对这个世界,却已经有明显的嘲讽。

文慧说,人就是要拿自己有的东西,去换自己没有的东西。她觉得她只有身体,而没有的东西,实在太多。

评论
文慧的大学也是用身体换来的. 她用身体从一厂长那换来了2万元的学费. 或你会同情她: 她家里穷, 上不了大学, 没有办法.
我到曾在海南儋州里的华南热带农业大学里住过. 那里没钱, 家里交不起大学学费的人有很多. 但他们不卖身, 他们贷款交学费, 他们下课后收破烂赚生活费.
还有, 中国的烂大学, 你不上它就没有别的办法成才?
很多自考生在外企工作了. 他们当时上不起大学, 到深圳打工, 一办打工赚钱养活自己(可能还要寄钱给家里的弟弟或妹妹上学),一边学习.
只要你想, 问题就一定有解决的办法. 只要你从内心堕落, 你总能找到借口.
上文中最后一句说:"她觉得她只有身体,而没有的东西,实在太多。"
我想问文慧啊, 你四年大学都玩什么了? 你玩到自己只有身体了. 你就不会用四年的大学时间学一门技术? 学外语, 学好了当同声传译, 老俞说那个工资是一小时5000元, 要不你学机械技工啊, 学好了到东莞, 一个月工资5000也没问题…
你用你的身体换来了20000元的学费, 然后到学校玩了四年, 你对得起你四年前的那个身体吗???
说你混到现在, 只留下了身体? 我问你, 这身体真的是你的? 那是你父母给你的. 你的父母给了你身体, 不但不能指望你来光宗耀祖, 你还混到了你卖你父母给你的身体过日子, 先不要说"没有任何怪罪父母的理由", 你先问问自己, 你对得起自己的父母吗?
最可悲的是你而竟然放弃了你的舞蹈天赋…

问题的重点
"她觉得她只有身体,而没有的东西,实在太多"
她有什么?
健康的身体, 健全的智商. 有了这两样, 加上耐心和刻苦, 你还有什么得不到的???
她没有什么?
一个安分守己的心, 一个知足常乐的心. 或她最缺的应该是另一盒化妆品. 但这化妆品永远填不满虚荣的心.

你能美多久?
SK-II能让你美多久? 化妆品不会让50岁的女人年轻, 但会让50岁的女人看起来更像妖精.

你能美多久??
年过花甲的戚雅仙站在舞台上老态龙钟, 但她只要张嘴唱出那越剧, 我感叹她很美.

什么是金钱?
金钱是工具, 借助它我可以生存,并实现我的其它愿望.
但它只是手段, 实现人生目标的手段.
为了人生而用合适的方法赚一定的金钱.
而不为了金钱而人生.
卖淫可以得到了金钱, 但从她第一次卖淫开始, 她的身心将一生背负一个永远不能擦洗的烙印, 如果这个烙印不是你的人生目标之一, 我想对卖淫之前的她说"赚钱有的是办法."

发表在 其它 | 留下评论

Ruby on Rails 数据库Migration操作语句实例

def self.up     # db schema更新到下一版本
  create_table :table, :force => true do |t| #创建表格
    t.column :name, :string
    t.column :age, :integer, { :default => 42 }
    t.column :description, :text
    # :string, :text, :integer, :float, :datetime, :timestamp, :time, :date,
    # :binary, :boolean
  end
  add_column :table, :column, :type #添加段

  rename_column :table, :old_name, :new_name #修改段名
  change_column :table, :column, :new_type #修改段数据类型
  execute "SQL语句"
  add_index :table, :column, :unique => true, :name => ‘some_name’  #添加索引
  add_index :table, [ :column1, :column2 ]
end

def self.down   # 撤消操作
  rename_column :table, :new_name, :old_name
  remove_column :table, :column
  drop_table :table #删除表格
  remove_index :table, :column
end

发表在 Ruby on Rails | 留下评论

Ruby on Rails HTML表单语句大全

表单开始标签:
<%= form_tag { :action => :save }, { :method => :post } %>
Use :multipart => true to define a Mime-Multipart form (for file uploads)
表单结束标签:
<%= end_form_tag %>

文本框 Text fields
<%= text_field :modelname, :attribute_name, options  %>
生成:
<input type="text" name="modelname[attribute_name]" id="attributename" />

实例:

text_field "post", "title", "size" => 20
    <input  type="text" id="post_title" name="post[title]"
            size="20" value="#{@post.title}" />

隐藏框:
<%= hidden_field … %>

密码框:
<%= password_field … %>

文件框
<%= file_field … %>

Rails Textarea框
<%= text_area … %>
实例:
text_area "post", "body", "cols" => 20, "rows" => 40
    <textarea cols="20" rows="40" id="post_body" name="post[body]">
        #{@post.body}
    </textarea>

单选框 Radio Buttons
<%= radio_button :modelname, :attribute, :tag_value, options %>
实例:
radio_button "post", "category", "rails"
radio_button "post", "category", "java"
    <input type="radio" id="post_category" name="post[category]" value="rails"
           checked="checked" />
    <input type="radio" id="post_category" name="post[category]" value="java" />

多选框 Check Box
<%= check_box :modelname, :attribute, options, on_value, off_value %>
实例
check_box "post", "validated"   # post.validated? returns 1 or 0
    <input type="checkbox" id="post_validate" name="post[validated]"
           value="1" checked="checked" />
    <input name="post[validated]" type="hidden" value="0" />

check_box "puppy", "gooddog", {}, "yes", "no"
    <input type="checkbox" id="puppy_gooddog" name="puppy[gooddog]" value="yes" />
    <input name="puppy[gooddog]" type="hidden" value="no" />

<%= select :variable, :attribute, choices, options, html_options %>

下拉菜单框 Select Menu
select  "post",        
        "person_id",   
        Person.find_all.collect {|p| [ p.name, p.id ] },
        { :include_blank => true }

 <select name="post[person_id]">
   <option></option>
   <option value="1" selected="selected">David</option>
   <option value="2">Sam</option>
   <option value="3">Tobias</option>
 </select>

Collection Selection
<%= collection_select :variable, :attribute, choices, :id, :value %>

日期选择框:
<%= date_select :variable, :attribute, options %>
<%= datetime_select :variable, :attribute, options %>
实例:
date_select "post", "written_on"
date_select "user", "birthday", :start_year => 1910
date_select "user", "cc_date", :start_year => 2005,
                               :use_month_numbers => true,
                               :discard_day => true,
                               :order => [:year, :month]

datetime_select "post", "written_on"

发表在 Ruby on Rails | 留下评论

Ruby on Rails数据库操作

数据库元被影射成对象
(object-relational mapping (ORM)层)
table<=>class
row<=>object
column<=>object attribute

class和table的命名对应关系实例
Order<=>orders
TaxAgency<=>tax_agencies
Person<=>people

复数形式关闭方法config/environment.rb:
ActiveRecord::Base.pluralize_table_names = false
自定义表格名称方法:
class Sheep < ActiveRecord::Base
 set_table_name "sheep"
end

Ruyb数据类型和SQL数据类型对应关系表
int,integer<=>Fixnum
float,double,decimal,numeric<=>Float
interval,date<=>Date
datetime,time<=>Time
char,varchar,string,clob,blob,text<=>String
boolean<=>see text…

访问属性(数据库列):
account[:balance] #=> 返回当前值
account[:balance] = 0.0 #=> 指定数值

修正数据库列的取值范围的方法:
class Account < ActiveRecord::Base
 def balance=(value)
  raise BalanceTooLow if value < MINIMUM_LEVEL
  self[:balance] = value
 end
end

访问属性(数据库列)更方便的方法:
account.balance #=> 返回当前值
account.balance = 0.0 #=> 指定数值

以上方式得到的数据库数据将是ruby按自身的数据类型格式化好的,如果要得到原始数据,可用以下形式代码:
account.balance_before_type_cast #=> "123.4", 字符串
account.release_date_before_type_cast #=> "20050301"

是非属性
在ruby中只有falsenil才被判断为false

数据库主键(Primary Keys)
Ruby on Rails默认以id为主键

自定义主键的方法:
class BadBook < ActiveRecord::Base
 set_primary_key "isbn"
end

数据创建,读取,更新和删除(CRUD:Create, Read, Update, Delete)

创建新数据

实例:
an_order = Order.new
an_order.name ="Dave Thomas"
an_order.save #在save()之前所有数据只存在内存中

用以下方式可以减少产生一个an_order变量:
Order.new do |o|
 o.name = "Dave Thomas"
 # . . .
 o.save
end

当数据来自HTML表单时,可以考虑用以下方式:
an_order = Order.new(
 :name =>"Dave Thomas",
#…
)
an_order.save

使用create()代换new()可直接保存到数据库,省去an_order.save:
an_order = Order.create(
 :name => "Dave Thomas")

可以使用hash同时保存多组数据:
 orders = Order.create(
  [ { :name =>"Dave Thomas" },
   { :name =>"Andy Hunt" } ] )

new()或create()也可以直接接参数:
order = Order.create(params)

读取数据
an_order = Order.find(27)
# 直接找出id = 27的数据,可以同时读取多个object.
an_order = Order.find_by_id(27)
# 效果类似,但一次只能读一个,在找不到符合的object时返回nil,而不是错误。
# 从一个表单读取product id列表,然后计算这些商品的总价:
product_list = params[:product_ids]
total = 0.0
Product.find(product_list).each {|prd| total += prd.total}

带条件的读取:
pos = Order.find(:all,
:conditions => "name = ‘dave’ and pay_type = ‘po’")

不安全的表单参数传递读取数据库:
name = params[:name]
# 此方法有被SQL注入方式入侵的风险!!!
pos = Order.find(:all,
:conditions =>"name = ‘#{name}‘ and pay_type = ‘po’")
#注意上面单双引号的使用及变量的传递方法

更安全的方法:
name = params[:name]
pos = Order.find(:all,
:conditions => ["name = ? and pay_type = 'po'", name])

你也可以这样:
name = params[:name]
pay_type = params[:pay_type]
pos = Order.find(:all,
:conditions => ["name = :name and pay_type = :pay_type",
{:pay_type => pay_type, :name => name}])

终极简化版:
pos = Order.find(:all,
:conditions => ["name = :name and pay_type = :pay_type", params])

排序和查找第3(?)至13(?)列的方法:
orders = Order.find(:all,
 :conditions =>"name = ‘Dave’",
 :order =>"pay_type, shipped_at DESC",
 :limit => 10
 :offset => 2)

联合数据表的查找方法(一般用不上):
LineItem.find(:all,
:conditions => "pr.title = ‘Programming Ruby’",
:joins =>"as li inner join products as pr on li.product_id = pr.id")

查找有序一列的方法:
order = Order.find( :first,
 :conditions =>"name = ‘Dave Thomas’",
 :order => "id DESC")

直接使用sql语句的查询方法:
items = LineItem.find_by_sql("select *, quantity*unit_price as total_price,products.title as title from line_items, products where line_items.product_id = products.id ")
li = items[0]
puts "#{li.title}: #{li.quantity}x#{li.unit_price} => #{li.total_price}"
你可以使用"as".

在这里你也可以传递参数:
Order.find_by_sql(["select * from orders where amount > ?",
params[:amount]])

计算行数
c1 = Order.count
c2 = Order.count(["name = ?", "Dave Thomas"])
c3 = LineItem.count_by_sql("select count(*) from line_items, orders  where line_items.order_id = orders.id and orders.name = ‘Dave Thomas’ ")
puts "Dave在#{c2}个定单里一共定了#{c3} 件商品 (目前定单总数:#{c1})"

动态查询
order = Order.find_by_name("Dave Thomas")#只查一列
orders = Order.find_all_by_name("Dave Thomas")
order = Order.find_all_by_email(params['email'])

可同时查多个条件,如:
user = User.find_by_name_and_password(name, pw)

重载数据库
stock = Market.find_by_ticker("RUBY")
loop do
 puts "Price = #{stock.price}"
 sleep 60
 stock.reload
end

更新数据
使用save()
order = Order.find(123)
order.name = "Fred"
order.save

orders = Order.find_by_sql("select id, name, pay_type from orders where id=123")
first = orders[0]
first.name ="Wilma"
first.save

使用update_attribute()
order = Order.find(123)
order.update_attribute(:name,"Barney")
order = Order.find(321)
order.update_attributes(:name => "Barney",
:email =>"barney@bedrock.com")

使用更快捷的update()
order = Order.update(12, :name => "Barney", :email => "barney@bedrock.com")

使用update_all()
result = Product.update_all("price = 1.1*price", "title like ‘%Java%‘")

save()和save!()
save()失败时返回nil
if order.save
 # 成功
else
 # 保存失败则…
end

save!()失败时出错
begin
 order.save!
rescue RecordInvalid => error
 # 保存失败RecordInvalid exception
end

数据锁(防止数据保存撞车)
加段:lock_version int default 0,

删除数据
delete()删除
Order.delete(123)
User.delete([2,3,4,5])
Product.delete_all(["price > ?", @expensive_price])

destroy()冻结(在model层面)
order = Order.find_by_name("Dave")
order.destroy
# … order将被冻结

数据库关系(相关键)参看:Ruby on Rails数据表格关系

发表在 Ruby on Rails | 留下评论

Ruby on Rails常用内置方法

对象是否为空blank?
puts [ ].blank? #=> true
puts { 1 => 2}.blank? #=> false
puts " cat ".blank? #=> false
puts "".blank? #=> true
puts " ".blank? #自动去除前后空格=> true
puts nil.blank? #=> true

排序:group_by()
groups = posts.group_by {|post| post.author_id}

组句:to_sentence()
puts [ "ant", "bat", "cat"].to_sentence #=> "ant, bat, and cat"
puts [ "ant", "bat", "cat"].to_sentence(:connector => "and not forgetting")
#=> "ant, bat, and not forgetting cat"
puts [ "ant", "bat", "cat"].to_sentence(:skip_last_comma => true)
#=> "ant, bat and cat"

分组:in_groups_of()
[1,2,3,4,5,6,7].in_groups_of(3) {|slice| p slice}
#=> [1, 2, 3]
[4, 5, 6]
[7,nil, nil]
[1,2,3,4,5,6,7].in_groups_of(3,"X") {|slice| p slice}
#=> [1, 2, 3]
[4, 5, 6]
[7,"X", "X"]

字符串方法:
string = "Now is the time"
puts string.at(2) #=> "w"
puts string.from(8) #=> "he time"
puts string.to(8) #=> "Now is th"
puts string.first #=> "N"
puts string.first(3) #=> "Now"
puts string.last #=> "e"
puts string.last(4) #=> "time"
puts string.starts_with?("No") #=> true
puts string.ends_with?("ME") #=> false

count = Hash.new(0)
string.each_char {|ch| count[ch] += 1}
p count #=> {" "=>3, "w"=>1, "m"=>1, "N"=>1, "o"=>1, "e"=>2, "h"=>1, "s"=>1, "t"=>2, "i"=>2}

改变字符串的显示格式:
puts "cat".pluralize #=> cats
puts "cats".pluralize #=> cats
puts "erratum".pluralize #=> errata
puts "cats".singularize #=> cat
puts "errata".singularize #=> erratum
puts "first_name".humanize #=> "First name"
puts "now is the time".titleize #=> "Now Is The Time"
你可以自定义特定单词的单复数转换规则

数字方法:
puts 3.ordinalize #=> "3rd"
puts 321.ordinalize #=> "321st"

数量方法:
puts 20.bytes #=> 20
puts 20.kilobytes #=> 20480
puts 20.megabytes #=> 20971520
puts 20.gigabytes #=> 21474836480
puts 20.terabytes #=> 21990232555520
puts 20.petabytes #=> 22517998136852480
puts 1.exabyte #=> 1152921504606846976

时间方法:
puts 20.seconds #=> 20
puts 20.minutes #=> 1200
puts 20.hours #=> 72000
puts 20.days #=> 1728000
puts 20.weeks #=> 12096000
puts 20.fortnights #=> 24192000
puts 20.months #=> 51840000
puts 20.years #=> 630720000

puts Time.now #=> Thu May 18 23:29:14 CDT 2006
puts 20.minutes.ago #=> Thu May 18 23:09:14 CDT 2006
puts 20.hours.from_now #=> Fri May 19 19:29:14 CDT 2006
puts 20.weeks.from_now #=> Thu Oct 05 23:29:14 CDT 2006
puts 20.months.ago #=> Sat Sep 25 23:29:16 CDT 2004
puts 20.minutes.until("2006-12-25 12:00:00".to_time)
#=> Mon Dec 25 11:40:00 UTC 2006
puts 20.minutes.since("2006-12-25 12:00:00".to_time)
#=> Mon Dec 25 12:20:00 UTC 2006

now = Time.now
puts now #=> Thu May 18 23:36:10 CDT 2006
puts now.to_date #=> 2006-05-18
puts now.to_s #=> Thu May 18 23:36:10 CDT 2006
puts now.to_s(:short) #=> 18 May 23:36
puts now.to_s(:long) #=> May 18, 2006 23:36
puts now.to_s(:db) #=> 2006-05-18 23:36:10
puts now.to_s(:rfc822) #=> Thu, 18 May 2006 23:36:10 -0500
puts now.ago(3600) #=> Thu May 18 22:36:10 CDT 2006
puts now.at_beginning_of_day #=> Thu May 18 00:00:00 CDT 2006
puts now.at_beginning_of_month #=> Mon May 01 00:00:00 CDT 2006
puts now.at_beginning_of_week #=> Mon May 15 00:00:00 CDT 2006
puts now.beginning_of_quarter #=> Sat Apr 01 00:00:00 CST 2006
puts now.at_beginning_of_year #=> Sun Jan 01 00:00:00 CST 2006
puts now.at_midnight #=> Thu May 18 00:00:00 CDT 2006
puts now.change(:hour => 13) #=> Thu May 18 13:00:00 CDT 2006
puts now.last_month #=> Tue Apr 18 23:36:10 CDT 2006
puts now.last_year #=> Wed May 18 23:36:10 CDT 2005
puts now.midnight #=> Thu May 18 00:00:00 CDT 2006
puts now.monday #=> Mon May 15 00:00:00 CDT 2006
puts now.months_ago(2) #=> Sat Mar 18 23:36:10 CST 2006
puts now.months_since(2) #=> Tue Jul 18 23:36:10 CDT 2006
puts now.next_week #=> Mon May 22 00:00:00 CDT 2006
puts now.next_year #=> Fri May 18 23:36:10 CDT 2007
puts now.seconds_since_midnight #=> 84970.423472
puts now.since(7200) #=> Fri May 19 01:36:10 CDT 2006
puts now.tomorrow #=> Fri May 19 23:36:10 CDT 2006
puts now.years_ago(2) #=> Tue May 18 23:36:10 CDT 2004
puts now.years_since(2) #=> Sun May 18 23:36:10 CDT 2008
puts now.yesterday #=> Wed May 17 23:36:10 CDT 2006
puts now.advance(:days => 30) #=> Sat Jun 17 23:36:10 CDT 2006
puts Time.days_in_month(2) #=> 28
puts Time.days_in_month(2, 2000) #=> 29

日期方法:
date = Date.today
puts date.to_s #=> "2006-05-18"
puts date.to_time #=> Thu May 18 00:00:00 CDT 2006
puts date.to_s(:short) #=> "18 May"
puts date.to_s(:long) #=> "May 18, 2006"
puts date.to_s(:db) #=> "2006-05-18"

将字符串转成时间日期:
puts "2006-12-25 12:34:56".to_time #=> Mon Dec 25 12:34:56 UTC 2006
puts "2006-12-25 12:34:56".to_date #=> 2006-12-25

发表在 Ruby on Rails | 留下评论

Ruby on Rails项目文件目录结构和环境设置

Ruby on Rails项目文件目录结构
README 说明文档
Rakefile 生成脚本
app/ 存放项目的Model, View和Controller等文件
components/  存放可重复使用的组件, 现在已经不大使用
config/ 配置文档及数据库连接配置文档
db/ 存放数据库schema和migration信息
doc/  存放自动生成的文档
lib/ 存放在Model, View和Controller间共享的代码
  为方便整理,不同功能的代码可放到其不同的子目录下.

  调用sub_dir下的my_lib_code.rb代码的方法为: require "sub_dir/my_lib_code"
log/ 存放程序生成的日志文件
  里面有三个最主要的log为:development.log, test.log和production.log,分别对应不同的运行环境.
public/ 存放对网络公开的文件
script/ 存放脚本工具
  不带参数直接运行大多数的脚本工具可以显示出相应的使用帮助信息.
  常见的script:
  about
  breakpointer
  destroy<=>generate
  server
  script/performance/benchmarker
test/  测试工具
tmp/  存放临时文件, 如缓存, session, socket…
vendor/ 存放外来代码, 如外来插件, 也可用来放rails构架本身, 以使rails兼容不同版本需求的程序.

运行环境
使用-e XXXX切换运行环境:
ruby script/server -e production #默认为development

配置数据库参数
修改config/database.yml文件

配置环境
修改config/environment.rb文件.

命名规范
所有变量以小写字母单词命名,单词间用下划线"_"分隔. 如order_status
所有class和module以大写开头的单词命名,单词间直接连接,如: LineItem

数据库中所有表格命名形式同变量名,且全为复数形式,如:orders
所有文件名命名形式也同变量名

Rails可推论相关文件名, 所以在框架内可以节省很多require "xxx". Rails会自动加入相关的调用.
Rails关于文件名的思维逻辑实例:
如果一个class名为:LineItem
ralis将推出:
1.此class对应的数据库表格名为line_items.
2.此class对应的文件名为line_item.rb
….

创建model下的controller
ruby script/generate controller Admin::Book action1 action2 …

使用debug() helper method
<%=debug(@order) %>

发表在 Ruby on Rails | 2 条评论

那个下午

那个下午,车从诺日朗出发

选了靠走道的位置坐下。不一会,他坐到了我前面。
眼睛大大的,个子很高的男孩,背了一个庞大的包,绑了一个相机的脚架。
一直没有交谈,只是沉默地乘车。
途中有绝美的风景,按捺不住,站起来叫停车。
他也站起来,跟我一起下车。
沿着木栈道,我们一前一后地走。
偶也停下来拍照,也是默不作声,各拍各的。
犀牛海是那天看到的最漂亮的海子。
阳光落在翠蓝的水面上,化成不停摇曳的亮片。
海边一排灌木,深秋时节,细叶泛红泛黄。

那个下午
犀牛海

发呆了一会,转身从包里拿东西时又看见了他。
他在不远处拍照。
看见我,他笑了笑,露出整齐而洁白的牙齿。
他走过来在我旁边坐下,给我看他刚拍的照片。
就这样认识了,他叫KEN,南方人,《华夏人文地理》的签约摄影师。
KEN对我说,每张照片其实都是记录一次消亡。
在按下快门的一瞬间,那样的景色已经成为过去,并且永远不复存在。

KEN不是很健谈的人,我也不是。
很多时候我们都沉默地享受阳光。
微微地眯起眼睛,享受那种快被晒成一滩软泥的感受。
后来,KEN教我当地的藏语。
睡觉念”呢“,谈恋爱念”哈给吃“,晒大阳念”应该的“。
渴了,KEN从硕大的包里找出两个红苹果,递了一个给我。
果皮红润透亮,水灵干净,很细致的男人。

大阳落山前我们道别。
他要去拍火花海的月夜,在沟里停留这么多天,为的就是这一晚的月圆。
我继续上路,没有目的,没有打算。
分开时他问我要手机号码。
我笑笑,告诉他之后不会有任何联系。
这样平静地邂逅,然后彼此消失,才是旅途中的人和事。
也会一直记得彼此。
是。一直记得
那个下午。

原作:曾珍《果壳里的村寨》 剪辑改编:卯时下雨

发表在 某时雨集 | 留下评论

Ruby on Rails实战–创建一个网上商店F收尾工作

上一节:Ruby on Rails实战–创建一个网上商店E用户管理模块

本节是depot电子商店的项目的最后一节。将完成生成XML Feed,并介绍如何生成项目文档。
生成通过商品ID反查定购用户信息的XML Feed.

orders的id和关联line_items表中的order_id,而line_items表中的product_id和products表中的id相关联, 通过orders可以查products的id,现在建立反向关联.
在depot/app/models/product.rb文件加入:
has_many :orders, :through => :line_items
使product通过line_item查order信息

新建一个info controller:

depot> ruby script/generate controller info
controllers/info_controller.rb文件内容为:
class InfoController < ApplicationController
  def who_bought
    @product = Product.find(params[:id])
    @orders = @product.orders
    respond_to do |accepts| #下面代码根据request的形式选择发送html还是xml格式内容
      accepts.html
      accepts.xml
    end
  end
end

加入html形式内容页面:depot/app/views/info/who_bought.rhtml,内容如下:
<h3>People Who Bought <%= @product.title %></h3>
<ul>
 <% for order in @orders -%>
  <li> <%= mail_to order.email, order.name %> </li>
 <% end -%>
</ul>

加入xml形式内容页面:depot/app/views/info/who_bought.rxml,内容如下:
xml.order_list(:for_product => @product.title) do
  for o in @orders
    xml.order do
      xml.name(o.name)
      xml.email(o.email)
    end
  end
end

现在通过http://localhost:3000/info/who_bought/1 地址就可以查出商品1(ID)的定购者信息了.

 

生成开发文档RDoc

项目中的doc/README_FOR_APP文件可以加入项目相关的说明信息.
使用depot> rake doc:app 可以生成项目的开发文档文件. 程序对项目中所有文件,classes和methods进行分析, 列出相关信息. 文件为html格式.

至此depot项目完成. 一个用Ruby on Rails续建的简单的网上商店完成了!

发表在 Ruby on Rails | 留下评论

绝对的经典–评越剧<五女拜寿>

岁寒方知松柏健
患难相守品德全
寿堂重叙天伦乐
情深和睦笑开颜
绝对的经典--评越剧<五女拜寿>

演出:浙江省小百花越剧团
编剧:顾锡东

看名字我以为这只是一场用来在节目表演的低俗奉承戏,但我错了,没想到这戏里面包容着这么多的人间甜酸.

越剧<五女拜寿>是绝对的经典.

第一是情节, 故事有起有伏, 有主有支, 有定有变… 以抒情见长的越剧突现出被磨灭了的述事能力.

第二是演员, 虽然没有哪个余音绕梁, 但都把角色表现得活灵活现, 有血有肉. 台上哪个可爱,哪个可恨, 哪个看了让人同情, 哪个看了让人谩骂, 历历在目!
没有主角, 没有配色, 是这个剧团,一个整体完成了这个杰作!
绝对的经典--评越剧<五女拜寿>
1984年<五女拜寿>电影版的海报

演员表:
董柯娣饰杨继康 徐爱武饰杨夫人
周美姣饰元芳(长女) 邵雁饰俞子云(长婿)
吴海丽饰双桃(次女)陈筱珍饰丁大富(次婿)
何英饰三春(三女) 方雪雯饰邹应龙(三婿)
应惠珠饰四春(四女)傅江凤饰陈文新(四婿)
陶慧敏饰五凤(五女) 江瑶饰陈文华(五婿)
茅威涛饰邹士龙 何赛飞饰翠云
王连琴饰陈松年 俞会珍饰陈夫人

发表在 电影评论, 越剧柔情 | 留下评论