ruby+gem常用命令(转载)

1

ruby -v #查看ruby 版本
ruby -e 'require"watir"; puts Watir::IE::VERSION' #查看watir版本

gem -v #gem版本
gem update #更新所有包
gem update --system #更新RubyGems软件

gem install rake #安装rake,从本地或远程服务器
gem install rake --remote #安装rake,从远程服务器

gem install watir -v(或者--version) 1.6.2#指定安装版本的
gem uninstall rake #卸载rake包
gem list d #列出本地以d打头的包
gem query -n '[0-9]' --local #查找本地含有数字的包
gem search log --both #从本地和远程服务器上查找含有log字符串的包
gem search log --remoter #只从远程服务器上查找含有log字符串的包
gem search -r log #只从远程服务器上查找含有log字符串的包

gem help #提醒式的帮助
gem help install #列出install命令 帮助
gem help examples #列出gem命令使用一些例子

gem build rake.gemspec #把rake.gemspec编译成rake.gem
gem check -v pkg/rake-0.4.0.gem #检测rake是否有效
gem cleanup #清除所有包旧版本,保留最新版本
gem contents rake #显示rake包中所包含的文件
gem dependency rails -v 0.10.1 #列出与rails相互依赖的包
gem environment #查看gem的环境

 

TAGS: ruby gem

为Rails应用增加RSS输出功能

1

初学ROR,写这个BLOG小应用练练手,目前本BLOG基本的功能是有了,有文章列表、详细内容、分类、标签。之前将BLOG地址发给朋友看,他问我怎么没有RSS...

RSS也叫聚合RSS是在线共享内容的一种简易方式(也叫聚合内容,Really Simple Syndication)。通常在时效性比较强的内容上使用RSS订阅能更快速获取信息,网站提供RSS输出,有利于让用户获取网站内容的最新更新。

在网上找了几种关于ROR实现RSS输出的方法,我的实现如下:

1. 在ArticlesController中增加action
    def rss
      @articles = Article.all
      render :action => "rss.rxml", :layout => false
    end

2. 在视图app/views/articles中增加rss.rxml视图模板,内容如下:
    xml.instruct! :xml, :version=>"1.0"
    xml.rss(:version=>"2.0") {
      xml.channel {
        xml.title("Miclle.Zheng")
        xml.link("http://www.miclle.com")
        xml.description("哥写的不是博客,哥写的是寂寞")
        xml.webMaster("miclle.zheng@gmail.com")
        xml.language("zh-cn")
        for article in @articles
          xml.item do
            xml.title(article.title)
            xml.author(article.user.login)
            xml.pubDate(article.created_at.rfc2822)
            xml.description(article.content)
            xml.link(article_url(article))
            xml.guid(article_url(article))
          end
        end
      }
    }

3. 配置路由
    map.feed '/rss', :controller => 'articles', :action => 'rss'

 

当我们访问http://miclle.com/rss即可看到所有文章的RSS输出!

渲染视图

4

一般情况下当我们访问http://localhost:3000/demo/index时,会执行demo控制器下的index动作,而后渲染app/views/demo/index.rhtml视图模板,将数据填充进去,并取回结果,通常是一个HTML文件,返回给WEB服务器,最后返回给客户端浏览器。

当demo控制器内没有index动作时,Rails仍然会假设你有一个名叫"index"的空动作,只是负责渲染index.rhtml视图模板。

每个控制器的方法都隐含了一个render命令,而render同时又是一个真实存在的方法,如:
def index
  render :template => "demo/index"
end

 

指定渲染:
    如果一个控制器的动作不想渲染其默认的模板,那么我们可以调用render方法以指定渲染其他任何一个模板,整个系统中的任何一个视图模板都可以被渲染。

 

渲染其他动作的模板:
    比如,当用户提交了不能通过验证的数据,我们需要用户对数据作进一步修改。一般采用的方式是把用户提交的数据回显到表单中,给出错误消息提示,以便于用户修正数据、再次提交。

    渲染其他动作的视图模板的原因是由于显示表单的动作和处理表单的动作往往不是同一个动作。所以处理表单信息的动作需要以某种方式再次显示原来表单的那个视图模板。如:
class ArticlesController < ApplicationController

  def index
    @articles = Article.all
  end

  def new
    @article = Article.new
  end

  def create
    @article = Article.new(params[:article])
    if @article.save
      redirect_to articles_path
    else
      render :new
    end
  end
 
end

 

渲染一个完全不同的模板:

    可以通过 :template或者 :file 参数在一个动作中渲染任意指定的模板文件。

    :template 参数指定一个模板根目录的相对路径,默认是 app/views (可以修改)
    如:render :template => "abuse/report"
          app/views/abuse/report.rhtml

    :file 参数接收一个文件的绝对路径。
    如:render :file => "/railsapps/myweb/app/views/templates/common.rhtml"

 

渲染局部模板:

    渲染视图可以渲染局部模板(通常简称为“局部渲染”),使用局部模板可以将你的模板分割成小文件,更加清晰,局部模板也可以被复用。

    在控制器中渲染局部模板一般被AJAX调用控制器中的动作的请求,并更新页面上指定的一个区域,另外还可以在视图层中嵌入局部模板如:
render :partial => "location" 局部模板的命名规则必须在最前面加上一个下划线,并将其保存在一个视图模板文件夹内,在引用的时候不需要下划线。

 

渲染内联模板代码:(不建议使用)

    有时候你需要把一段非常小的视图代码发给浏览器(主要用户AJAX视图辅助该当)
    render :inline => "<%= auto_complate_result(@headings, 'name') %>"  Rails处理内联视图代码的方式和处理视图模板完全一致。

 

渲染其他数据类型:

  1. :text

    有时候动作只需要给浏览器返回一段简单的文本,可以使用
    render :text => "Submission accepted"
    直接渲染、返回一段文本。

  2. :json

    JSON是专门提供给JavaScript使用的轻量级数据结构,通常是将AJAX请求的响应值通过这种模式返回。
    render :json => @record.to_json

  3. :xml

    render :xml => @record.to_xml

 

什么都不渲染:

    很少的情况下动作不想渲染任何东西(为了避免在Safari出现BUG,不渲染任何东西意味着发送一个空字符串给浏览器)
    render :nothing => true, :status => 401    #未授权的

 

渲染的属性:

    在使用render方法时,它可以接受一些额外的属性

  1. :content_type
    在WEB上的东西都属于MIME规定的类型,如果HTML内容的类型为text/html。在Rails中可以发送其它类型的内容,但Rails并不验证你实际发送的内容是否是你用 :content_type 指定的类型,所以需要我们自己保证一致性。

  2. :layout
    默认情况下,Rails会自动选择其需要渲染的布局模板返回给浏览器。使用 :layout 可以指定是否需要布局模板以及使用哪个布局模板。

  3. :status
    HTTP协议中宣言很多种状态码以用来标识返回给客户端的内容状态,Rails在大多数情况下都可以按照自己的状态选择合适的状态码,如200OK代表一次请求处理成功。

TAGS: rails view ruby

IE PNG FIX

0

大家都知道在IE6及以下版本对png图片支持不是很好,透明的部分会显示为灰色,目前解决这一BUG的方法有多种,一种是使用http://jquery.andreaseberhard.de/pngFix/的方法,一种是使用http://www.twinhelix.com/css/iepngfix/的方法。

从在项目中使用的经验来看,更偏向于使用第二种方法(http://www.twinhelix.com/css/iepngfix/),这种方案更稳定,效果很好,使用简单,支持png背景。

使用方法如下三步即可:

一. 先下载iepngfix.zip文件包,将blank.gif、iepngfix.htc、iepngfix_tilebg.js三个文件放入相应目录
  blank.gif 为透明的1×1大小的gif图片
  iepngfix.htc 需要在CSS代码中调用

 

二. 在你的CSS代码中需要对png兼容处加上{behavior:url("/javascripts/iepngfix.htc")}
如:
  <style type="text/css">
    img, div, a, input { behavior: url(/css/resources/iepngfix.htc) }
  </style>
 
你需要修改iepngfix.htc文件中
var thisFolder = document.URL.replace(/(\\|\/)[^\\\/]*$/, '/');
IEPNGFix.blankImg = thisFolder + 'blank.gif';
保证blank.gif的文件位置正确。

 

三. 最后在页面中引入<script src="/javascripts/iepngfix_tilebg.js" type="text/javascript"></script> JS文件,以支持png背景。

 

-------- 到此完成!--------

 

为了获得更好的效果,我们可以这样做:
<!--[if lte IE 6]>
  <style type="text/css">.pngfix{behavior:url("/javascripts/iepngfix.htc")}</style>
  <script src="/javascripts/iepngfix_tilebg.js" type="text/javascript"></script>
<![endif]-->
需要对png图片兼容的代码处加上class: pngfix即可,这样一来减少了对不同元素的处理,维护一个样式即可,同时也避免了对其它浏览器的影响。
不过我在项目中的处理是通过后台程序判断访问的浏览器类型及版本,只将这两行代码输出给IE6

TAGS: 前端 IE png

JavaScript 数组去重

0

function unique(array){
 array.sort();
 for ( var i = 1; i < array.length; i++ ) {
  if ( array[i] === array[i-1] ) {
   array.splice(i--, 1);
  }
 }
 return array;
}

TAGS: JavaScript

© Copyright 2010 Miclle.com - All rights reserved. RAILS_GEM_VERSION 2.3.5. Code by Miclle.Zheng