<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>鬼舞十七</title>
    <description>鬼舞十七</description>
    <link>http://sayid2008.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>宝典：第十二式 RILAS技巧集锦</title>
        <author>sayid2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://sayid2008.javaeye.com">sayid2008</a>&nbsp;
          链接：<a href="http://sayid2008.javaeye.com/blog/193320" style="color:red;">http://sayid2008.javaeye.com/blog/193320</a>&nbsp;
          发表时间: 2008年05月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          CSDN上看到这些觉得很有道理：<br />分享下<br />    * 将你的程序所用到的密码和API证书号保存在一个自定义的配置文件中。我使用一个YAML并沿用了database.yml类似的格式。 <br />    * 有需要的时候就使用常量。不要重复诸如你的客服邮件地址这类字符串，而是将它们保存在常量中（可以保存在environment.rb或者你自己的配置文件中），然后在整个程序中使用该常量。 <br />    * 保持使用UTC时间，这可以使你的程序有更好的一贯性。（不过Rails 2.1的Timezone可提供更好的功能） <br />    * 请勿在一个 Active Record? 数据模型中遍历另一个数据模型。那样的话会产生大量的SQL查询操作。正确的实现方法是：1）如果多个数据模型已经相互关联，那么可以使用find(: include) 方法进行勤式数据获取，那样的话在一个SQL查询中就可以获取多个数据模型中的数据。2）如果这些数据模型没有被关联，那么你可以写一个自定义的 find，在其中采用select和join来定义跨表查询。这样的话你可能需要你的数据库模型中为非本表的域定于值读取方法以获得正确类型的值。 <br />    * 请小心使用二进制域。在默认情况下，数据库查询会返回所有的域，包括任何二进制域中的完整内容。请使用 :select 来定义所需要获取的域，从而减轻系统负荷。 <br />    * 要生成周期性报表时，请为报表数据创建一个专用数据表，然后将报告数据缓存到该表中。这样做要比每次现实年度或月度报告是重新产生数据要来的快得多。 <br />    * 创建一个国家列表数据库。默认情况下，Rails使用字符串来选择和罗列国家，这对于数据模式的一致性来说是有害的。而且在生成报告时会产生问题。 <br />    * 避免编写臃肿的控制器(controller)，不要将一堆方法塞入controller，如果一个controller中有超过10个方法，那么请重新考虑你的设计 <br />    * 保持你的控制器和视图（view）尽量精简，在绝大多数情况下，你的大部分代码应该位于数据模型中，而不是控制器或者视图中。 <br />    * 不要在session中保存对象。如果需要的话，在session中保存数字或者字符串，然后在处理单个请求的时候根据session中的内容从数据库取回数据。（Rails 2.0 中的新session机制解决了这个问题） <br />    * 避免处理信息量超大的请求回复(response)。遇到要处理大信息量的请求时，你可以将改记录标志为有待处理，然后使用一个cron事务或者消息服务来处理这个花费时间的任务。Background RB? 也是一个选择. (我使用这种基数来过滤blog中的SPAM). <br />    * 当需要批量发送邮件时，请使用 ar_mailer，而不要在一个Rails的请求回复过程中进行发送。 <br />    * 使用 exception_notification插件， munin, monit等工具来监管你的应用程序和服务器。 <br />    * 不要吝啬硬件投入，那样的话你因为劣质的备份或便宜的硬件，而很快不得不花钱请人解决那些问题。 <br />    * 测试驱动（Test-drive）你的开发 <br />    * 使用数据库索引来提供查询速度。Rails仅索引主键，所以你需要根据具体情况设定额外的索引。 <br />    * 测量你的代码性能。使用ruby-prof gem 和插件测量你的代码，可以做些小修改便可使你的应用程序成倍提速。 <br />    * 将图像相关的代码依赖度减少到最小。如果你的应用程序仅仅需要生成一些缩略图，那么不要将内存浪费在导入巨大的图像库上，相反可以使用mini-magick 或 image_science 等轻量级图像库。 <br />    * 避免无节制地渲染小的片段（partials） <br />    * 使用CSS而避免使用行内标签来定义风格 <br />    * 不要使用 Active Record? 的 serialize 选项在数据库中保存巨大的对象 <br />    * 在数据模型中使用 attr_protected :fieldname 以避免关键数据被通过修改过的表单而改写。（attr_accessible 是更安全的方式，这里解释了为什么 <br />    * 使用Ruby类和继承来重构重复的控制器代码 <br />    * 使用 Javascrip 技巧将页面行为从页面代码标签中分离出来 <br />    * 将能够自给自足的类和模组（module）封装成 plugin 或 Ruby Gems?. <br />    * 尽可能缓存经常被访问的数据库。 <br />    * 编写自定义的 Test::Unit assertions 或 rSpec matchers 来帮助调试测试中出现的错误 <br />    * 使用 Linux 上的logrotate daemon 来 Rotate the Rails 和 Mongrel 的日志文件 <br />    * 需要可靠的备份需要 <br />    * 使用 Capistrano 或 Vlad 来自动部署你的网络应用程序 <br />    * 尽量保持方法精简。当一个方法长过10行时，请考虑重构它 <br />    * 运行 flog 来找出过于复杂的方法和类 <br />    * 不必过多使用条件语句。避免使用多层嵌套的if语句，而使用Ruby的case语句和Ruby对象来进行条件处理。 <br />    * Ruby 提供强力的元编程功能，不过这个功能很容易被滥用 (比如 eval 和 method_missing). <br />    * 熟悉了解各种流行的插件。 Instead of re-implementing the wheel, save yourself some time by using well tested, popular plugins. <br />    * 在你的login 或 user 控制器中使用 filter_parameter_logging :password, :password_confirmation 来从日志中过滤重要新。负责你的程序日志中将充满用户的密码
          <br/>
          <span style="color:red;">
            <a href="http://sayid2008.javaeye.com/blog/193320#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 15 May 2008 16:04:58 +0800</pubDate>
        <link>http://sayid2008.javaeye.com/blog/193320</link>
        <guid>http://sayid2008.javaeye.com/blog/193320</guid>
      </item>
      <item>
        <title>宝典：第十一式 Parseexcel读取EXCEL</title>
        <author>sayid2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://sayid2008.javaeye.com">sayid2008</a>&nbsp;
          链接：<a href="http://sayid2008.javaeye.com/blog/188472" style="color:red;">http://sayid2008.javaeye.com/blog/188472</a>&nbsp;
          发表时间: 2008年04月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          接着上次的想法接着做,文件到了服务器了现在要的就是打开文件显示需要的内容到页面上<br />这个要感谢weskycn给我提供的方法<br />那我就按照我的理解走上一遍吧!<br />首先这个功能是个GEM包实现的<br /><pre name="code" class="ruby">gem install parseexcel</pre><br />下载安装.<br />完成了就去辅助方法里面写上<br /><pre name="code" class="ruby">
  require 'parseexcel'
  def excel(file)
  workbook = Spreadsheet::ParseExcel.parse(RAILS_ROOT + "/excel/#{file}")
worksheet = workbook.worksheet(0)
arrays = Array.new()
worksheet.each { |row|
  if row != nil
    arra = Array.new()
  row.each { |cell|
    if cell != nil
     arra &lt;&lt;  cell.to_s('utf-8')
    end
   }
  arrays &lt;&lt; arra 
  end
}
arrays
end  </pre><br /><br />让后在试图里面写上<br /><pre name="code" class="ruby">&lt;%=excel(params[:filename])%></pre><br />就可以取出数据了,以数组的形式
          <br/>
          <span style="color:red;">
            <a href="http://sayid2008.javaeye.com/blog/188472#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 30 Apr 2008 16:43:14 +0800</pubDate>
        <link>http://sayid2008.javaeye.com/blog/188472</link>
        <guid>http://sayid2008.javaeye.com/blog/188472</guid>
      </item>
      <item>
        <title>宝典：第十式　无插件文件上传</title>
        <author>sayid2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://sayid2008.javaeye.com">sayid2008</a>&nbsp;
          链接：<a href="http://sayid2008.javaeye.com/blog/188468" style="color:red;">http://sayid2008.javaeye.com/blog/188468</a>&nbsp;
          发表时间: 2008年04月30日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          本来想做一个的是一个用户直接选定ＥＸＣＥＬ文件提交后将信息显示到页面<br />但是这个ＨＴＴＰ不让做，所以就做了个先上传到服务器再操作．<br />先说说我是怎么实现上传的吧！<br />首先试图就不用说了，看下就知道了<br /><pre name="code" class="ruby">
&lt;script language="javascript">
HTMLElement.prototype.insertAdjacentHTML=function(where, html)
{
  var e=this.ownerDocument.createRange();
  e.setStartBefore(this);
  e=e.createContextualFragment(html);
  switch (where){
    case 'beforeBegin': this.parentNode.insertBefore(e, this);break;
    case 'afterBegin': this.insertBefore(e, this.firstChild); break;
    case 'beforeEnd': this.appendChild(e); break;
    case 'afterEnd':
      if(!this.nextSibling) this.parentNode.appendChild(e);
      else this.parentNode.insertBefore(e, this.nextSibling); break;
  }
}
function addText(){
    var str ='&lt;input id="file1" name="file[]" size="30" type="file" />&lt;/br> &lt;input type="text" id="uploadfile_description" name="names[]">&lt;/br>';            
    document.getElementById('MyFile').insertAdjacentHTML("beforeEnd",str);    
}
&lt;/script>
 
&lt;%form_tag ({:action=>"upload"},:multipart=>true ) do %>
&lt;div id="MyFile">
文件路径：&lt;input id="file" name="file[]" size="30" type="file" />&lt;br>
保存文件名 &lt;input type="text" id="uploadfile_description" name="names[]">（无须填写后缀）&lt;br>
&lt;/div>&lt;input type="button" value="添加多个" onclick="addText()"/>
  &lt;input style="cursor:pointer" type="submit" value="上传"/>
&lt;%end%>
</pre><br />添加了一些ＪＳ，　用于同时提交多个文件．<br /><br />然后就是控制器了<br /><pre name="code" class="ruby">
  def upload　　　　
      unless request.get?  
    i=params[:file].size
    for num in (0..i-1)  
    if params[:file][num].original_filename[-3,3] == "xls"
      filename = uploadFile(params[:file][num],params[:names][num])
    else
      flash[:notice]  = "上传失败，上传的并非EXCEL文件！"
     end
   end
  end
  end

  protected
    
  def uploadFile(file,filenames)
     if !file.original_filename.empty?
      @filename = getFileName(file.original_filename,filenames)
      File.open("#{RAILS_ROOT}/excel/#{@filename}", "wb") do |f|
      f.write(file.read)
      end
     return @filename 
    end
  end
  def getFileName(filename,filenames)  
     if !filename.nil?  
       filename = filenames+".xls"
        return filename
     end     
  end
</pre><br />这里需要解释下的是，　文件将保存在RAILS_ROOT/excel/文件夹里面，这个可以根据需要改变．<br />依照上面应该能将文件成功保存到EXCEL文件夹下面<br />顺带现实文件夹下文件的方法. <br />辅助方法里面些上这些<br /><pre name="code" class="ruby">
require 'find'
 def root_excel
    options = Array.new
	Find.find(RAILS_ROOT + "/excel") do |lang|              
	  if lang =~ /\.xls$/
           lang_pattern = File.basename(lang)      
           options &lt;&lt; lang_pattern
         end
	end
	options
   end 
</pre><br />再在试图中加上<br /><pre name="code" class="ruby">
&lt;%for excel in root_excel%>
&lt;%=excel%>
&lt;%end%>
</pre><br /><br />EXCEL的文件就能显示出来了<br /><br />上传了就可以去显示了<br /><a href="http://sayid2008.javaeye.com/blog/188472" target="_blank">http://sayid2008.javaeye.com/blog/188472</a>提供显示
          <br/>
          <span style="color:red;">
            <a href="http://sayid2008.javaeye.com/blog/188468#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 30 Apr 2008 16:29:21 +0800</pubDate>
        <link>http://sayid2008.javaeye.com/blog/188468</link>
        <guid>http://sayid2008.javaeye.com/blog/188468</guid>
      </item>
      <item>
        <title>宝典：第九式 多语言localization插件</title>
        <author>sayid2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://sayid2008.javaeye.com">sayid2008</a>&nbsp;
          链接：<a href="http://sayid2008.javaeye.com/blog/186802" style="color:red;">http://sayid2008.javaeye.com/blog/186802</a>&nbsp;
          发表时间: 2008年04月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          首先是插件安装 <br />　　这个都知道RAILS_ROOT下运行<br /><pre name="code" class="ruby">ruby script\plugin install localization </pre><br /><br />插件的使用 <br />　　语言包建立在RAILS_ROOT/lang/目录下,我们就建立一个名为zh_CN.rb的文件。内容如下： <br /><br /><pre name="code" class="ruby">Localization.define('zh_CN') do |l| 
l.store 'Manage', '管理' 
l.store 'Users', '用户' 
end　</pre>　<br />然后在application.rb文件中加入如下内容，定义需要使用的语言名： <br /><br /><pre name="code" class="ruby">Localization.lang = 'zh_CN'　　</pre><br /><br />再打开一个模板文件，在其中输入如下内容： <br /><br /><pre name="code" class="ruby">&lt;%= _("Manage") %>　</pre><br />　启动Rails项目，浏览这个页面，看看是不是输出的是中文呢？
          <br/>
          <span style="color:red;">
            <a href="http://sayid2008.javaeye.com/blog/186802#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Apr 2008 15:27:53 +0800</pubDate>
        <link>http://sayid2008.javaeye.com/blog/186802</link>
        <guid>http://sayid2008.javaeye.com/blog/186802</guid>
      </item>
      <item>
        <title>宝典：第八式　表间关联NORMAL</title>
        <author>sayid2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://sayid2008.javaeye.com">sayid2008</a>&nbsp;
          链接：<a href="http://sayid2008.javaeye.com/blog/186640" style="color:red;">http://sayid2008.javaeye.com/blog/186640</a>&nbsp;
          发表时间: 2008年04月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          首先我们继续在easy里面提到的一对多的　Questions-Answers<br />这里已经有了题目了，有题目了接下来要干什么咧，　　做题目<br />这里我们就加入Users 与　notes<br />notes记录谁做过那个题，选择的答案<br />关系就这样理解<br /><span style="font-size: large"><span style="color: red">这个图片怎么传上去啊???</span></span><br /><img src="C:\Documents and Settings\Administrator\桌面\xialas.bmp" /><br /><br />然后是加入关联代码<br /><br />几个模型中分别为<br /><pre name="code" class="ruby">
class Answer &lt; ActiveRecord::Base
    belongs_to :question    
    has_many :users , :through => :notes 
    has_many :notes , :dependent =>  :destroy 
    end

class Question &lt; ActiveRecord::Base
  has_many :answers ,:dependent =>  :destroy
  has_many :notes
  has_many :users , :through => :notes 
end  

class User &lt; ActiveRecord::Base
 has_many :notes
  has_many :questions , :through => :notes
  has_many :answers , :through => :notes 
end

class Note&lt; ActiveRecord::Base
  belongs_to :question
  belongs_to :answer
  belongs_to :user
end
</pre><br /><br /><br />上面完成的都是等同与配制比较枯燥，下面的将是神奇的了，用＂敏捷之道＂的话说，就是魔法即将来临．<br /><pre name="code" class="ruby">
##只需要取出相应的字段后下面即可实现
@user.questions         ##这个人做过的所有题目（纪录集）
@user.answers　　　　　　##这个用户选择过的所有答案（纪录集）
@user.notes　　　　　　　##这个用户的所有做题纪录（纪录集）
@question.users　　　　　##做过这个题目的所有人（纪录集）
@answer.users　　　　　　##选择过这个答案的所有人（纪录集）
</pre><br /><br />不知道表达得怎么样，有什么不懂欢迎留言提问，或者去<a href="http://sayid2008.javaeye.com/blog/157405" target="_blank">http://sayid2008.javaeye.com/blog/157405</a>看看
          <br/>
          <span style="color:red;">
            <a href="http://sayid2008.javaeye.com/blog/186640#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Apr 2008 10:26:41 +0800</pubDate>
        <link>http://sayid2008.javaeye.com/blog/186640</link>
        <guid>http://sayid2008.javaeye.com/blog/186640</guid>
      </item>
      <item>
        <title>我要导入</title>
        <author>sayid2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://sayid2008.javaeye.com">sayid2008</a>&nbsp;
          链接：<a href="http://sayid2008.javaeye.com/blog/186615" style="color:red;">http://sayid2008.javaeye.com/blog/186615</a>&nbsp;
          发表时间: 2008年04月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          最近小弟做了个小东西,挂上去之后要填基本数据,于是就填吧.一条\两条\三条....<br />越填越郁闷,我何必这样为难自己咧!于是就开始"四处寻觅"用ROR将EXCEL\WORD导入到ＭＹＳＱＬ的方法，找了许久没有找到．让后放弃了ＲＯＲ想用ＪＳ实现算了结果还是不行，什么ＨＴＴＰ协议阻难啊什么的！　<br /><br />找得我好生郁闷啊！　　那位有没有这个方面经验啊，　能否赐教　，小弟就此谢了！ 　
          <br/>
          <span style="color:red;">
            <a href="http://sayid2008.javaeye.com/blog/186615#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Apr 2008 09:40:54 +0800</pubDate>
        <link>http://sayid2008.javaeye.com/blog/186615</link>
        <guid>http://sayid2008.javaeye.com/blog/186615</guid>
      </item>
      <item>
        <title>宝典：第七式 惊奇小发现之option_groups_from_collection...</title>
        <author>sayid2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://sayid2008.javaeye.com">sayid2008</a>&nbsp;
          链接：<a href="http://sayid2008.javaeye.com/blog/186608" style="color:red;">http://sayid2008.javaeye.com/blog/186608</a>&nbsp;
          发表时间: 2008年04月25日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          昨天同事跟我出了个题＂只＂字加一笔是个什么字，想了好久，想出来了不过有点怪异！<br />大家有空想想吧！　　比较有意思！<br /><br />言归正传吧！<br />说起＂option_groups_from_collection_for_select＂也算不上是个什么惊奇发现<br />以前就看到过，不过没有正式去用过，早些天式了一下．<br />显示形式大概就是<br /><br /><img src="C:\Documents and Settings\Administrator\桌面\xiala.bmp" /><br /><br />这个使用起来其实很方便的只需要在写好表间关联的情况下在表单中加上<br /><pre name="code" class="ruby">
&lt;select name="object[field]">
&lt;%=option_groups_from_collection_for_select(father,"sons",:father_name,:son_id,:son_name )%>
&lt;/select>
</pre><br /><br />这些就能实现上面图片的显示了!<br /><img src="/images/smiles/icon_wink.gif"/>惊奇吧, 至少我决的<img src="/images/smiles/icon_biggrin.gif"/>
          <br/>
          <span style="color:red;">
            <a href="http://sayid2008.javaeye.com/blog/186608#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 25 Apr 2008 09:24:52 +0800</pubDate>
        <link>http://sayid2008.javaeye.com/blog/186608</link>
        <guid>http://sayid2008.javaeye.com/blog/186608</guid>
      </item>
      <item>
        <title>宝典：第六式　基础小复习之字符串</title>
        <author>sayid2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://sayid2008.javaeye.com">sayid2008</a>&nbsp;
          链接：<a href="http://sayid2008.javaeye.com/blog/186433" style="color:red;">http://sayid2008.javaeye.com/blog/186433</a>&nbsp;
          发表时间: 2008年04月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          下午空余时间翻开了&lt;&lt;The Ruby Way>>使用字符串看了下, 发现一些小东西<img src="/images/smiles/icon_wink.gif"/><br />作个小笔记吧<br />在日常的编程中,字符串操作大概包括拼接、分解、分析、查找、替换等。<br /><br />1、查找长度<br /><pre name="code" class="ruby">String.length
String.size</pre><br /><br />2、字符串分解<br />split 返回标记数组<br /><pre name="code" class="ruby">String.split(content,mun)
##content不写按空格分解，if content == “，” 按，分解
##mun 不填就删除分解尾部的空值项
</pre><br /><br />3、格式化字符串<br /><pre name="code" class="ruby">
String="good_man"
String.ljust(16)  # "good_man"
String.conter(16,"A")  # "AAAAgood_manAAAA"
String.Rjust(16,"No")  # "NoNoNoNogood_man"
</pre><br /><br />4、大小写控制<br /><pre name="code" class="ruby">
String.downcase   #小写
String.upcase     #大写
String.capitalize #首字符大写
</pre><br /><br />5、查找<br /><pre name="code" class="ruby">
String[x,y]   #X开始取Y个
String[/x..y/]   #字母X到字母Y
String["son"]    #直接查找
</pre><br /><br />6、替换<br /><pre name="code" class="ruby">String.sub(/x/,"y")   #将X子串用Y替换</pre><br /><br />7、 搜索、<br /><pre name="code" class="ruby">String.index(?son)   #返回son的位置
String.include? "son"  #返回true/falsh</pre><br /><br /><pre name="code" class="ruby">
String &lt;&lt; son  #son添加塞 String末尾
</pre><br /><br />.............
          <br/>
          <span style="color:red;">
            <a href="http://sayid2008.javaeye.com/blog/186433#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 24 Apr 2008 16:13:37 +0800</pubDate>
        <link>http://sayid2008.javaeye.com/blog/186433</link>
        <guid>http://sayid2008.javaeye.com/blog/186433</guid>
      </item>
      <item>
        <title>宝典：第五式 惊奇小发现之Time-ago-in-words</title>
        <author>sayid2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://sayid2008.javaeye.com">sayid2008</a>&nbsp;
          链接：<a href="http://sayid2008.javaeye.com/blog/186170" style="color:red;">http://sayid2008.javaeye.com/blog/186170</a>&nbsp;
          发表时间: 2008年04月24日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          WEB2.0类的网站越来越多了,对于时间显示这个概念也都有不同的方法了,<br /><br />类似:"刚刚","*分钟前","几天前"这些字眼也常常会见到了<br /><br />于是近期老在想这个到底是怎么实现的,在一次看lovdbyless的时候不经意发现了<br /><br />Time-ago-in-words 方法<br /><br />用法也比较简单<br /><pre name="code" class="ruby">
&lt;%=time_ago_in_words(from_time, include_seconds = false) %>
##include_seconds是否显示秒
</pre><br /><br />看了下原码<br /><pre name="code" class="ruby">
 def distance_of_time_in_words(from_time, to_time = 0, include_seconds = false)
        from_time = from_time.to_time if from_time.respond_to?(:to_time)
        to_time = to_time.to_time if to_time.respond_to?(:to_time)
        distance_in_minutes = (((to_time - from_time).abs)/60).round
        distance_in_seconds = ((to_time - from_time).abs).round

        case distance_in_minutes
          when 0..1
            return (distance_in_minutes == 0) ? 'less than a minute' : '1 minute' unless include_seconds
            case distance_in_seconds
              when 0..4   then 'less than 5 seconds'
              when 5..9   then 'less than 10 seconds'
              when 10..19 then 'less than 20 seconds'
              when 20..39 then 'half a minute'
              when 40..59 then 'less than a minute'
              else             '1 minute'
            end

          when 2..44           then "#{distance_in_minutes} minutes"
          when 45..89          then 'about 1 hour'
          when 90..1439        then "about #{(distance_in_minutes.to_f / 60.0).round} hours"
          when 1440..2879      then '1 day'
          when 2880..43199     then "#{(distance_in_minutes / 1440).round} days"
          when 43200..86399    then 'about 1 month'
          when 86400..525599   then "#{(distance_in_minutes / 43200).round} months"
          when 525600..1051199 then 'about 1 year'
          else                      "over #{(distance_in_minutes / 525600).round} years"
        end
      end

  

      def time_ago_in_words(from_time, include_seconds = false)
        distance_of_time_in_words(from_time, Time.now, include_seconds)
      end
</pre><br /><br />小弟我不学习浅不知道有没有中文显示时间差的,于是就自己在application_helper里面写了下面的转换为中文<br /><br /><pre name="code" class="ruby">
def ch_time(from_time)
time = time-ago-in-words(from_time,include_seconds = true)

time = time.sub(/about /,"")
time = time.sub(/over /,"") 
if time.to_i == 0
case time.to_s
when 'half a minute'   then '半分钟前'
when 'less than a minute' then '不到1分钟前'
when 'less than 5 seconds'   then '5秒前'
when 'less than 10 seconds' then '10秒前'
when 'less than 20 seconds' then '20秒前'
end
else
mun = time.to_i 
case time[-3,3]
when 'nds'   then mun.to_s+'秒前'
when 'ute'   then mun.to_s+'分前'
when 'tes' then mun.to_s+'分钟前'
when 'urs','our' then mun.to_s+'小时前'
when 'day','ays' then mun.to_s+'天前'
when 'nth','ths' then mun.to_s+'个月前'
when 'ear','ars' then mun.to_s+'年前'
end
end 
end
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://sayid2008.javaeye.com/blog/186170#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 24 Apr 2008 08:57:57 +0800</pubDate>
        <link>http://sayid2008.javaeye.com/blog/186170</link>
        <guid>http://sayid2008.javaeye.com/blog/186170</guid>
      </item>
      <item>
        <title>宝典：第四式 图片上传插件Acts As Attachment</title>
        <author>sayid2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://sayid2008.javaeye.com">sayid2008</a>&nbsp;
          链接：<a href="http://sayid2008.javaeye.com/blog/185959" style="color:red;">http://sayid2008.javaeye.com/blog/185959</a>&nbsp;
          发表时间: 2008年04月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          开始也是下载<br />在项目目录下面运行<br /><br /><pre name="code" class="ruby">script/plugin source http://svn.techno-weenie.net/projects/plugins</pre><br />然后是安装<br /><pre name="code" class="ruby">
script/plugin install acts_as_attachment</pre><br />创建dvd_cover模型<br /><pre name="code" class="ruby">
script/generate attachment_model dvd_cover


    create_table :dvd_covers do |t|
      t.column "dvd_id", :integer
      t.column "content_type", :string
      t.column "filename", :string     
      t.column "size", :integer
      t.column "parent_id",  :integer 
      t.column "thumbnail", :string
      t.column "width", :integer  
      t.column "height", :integer
    end
</pre><br /><br />数据库重新rake下<br /><br /><pre name="code" class="ruby"><strong><span style="color: red"><span style="font-size: x-large">rake db:migrate</span></span></strong></pre><br /><br />下面在把生成的模型DvdCover中的代码替换成这个(全部替换下就好了)<br /><pre name="code" class="ruby">
class DvdCover &lt; ActiveRecord::Base
  belongs_to :dvd
  acts_as_attachment :storage => :file_system, :max_size => 300.kilobytes, :content_type => :image
  validates_as_attachment
end</pre><br /><br />让后下面的自己去写下吧(分开了反而看不清楚)<br /><pre name="code" class="ruby">
## app/controllers/dvd_covers_controller.rb
class DvdCoversController &lt; ApplicationController
  def index
    @dvd_covers = DvdCover.find(:all)
  end

  def new
    @dvd_cover = DvdCover.new
  end

  def show
    @dvd_cover = DvdCover.find params[:id]
  end

  def create
    @dvd_cover = DvdCover.create! params[:dvd_cover]
    redirect_to :action => 'show', :id => @dvd_cover
  rescue ActiveRecord::RecordInvalid
    render :action => 'new'
  end
end

## app/views/dvd_covers/index.rhtml
&lt;h1>DVD Covers&lt;/h1>

&lt;ul>
&lt;% @dvd_covers.each do |dvd_cover| -%>
  &lt;li>&lt;%= link_to dvd_cover.filename, :action => 'show', :id => dvd_cover %>&lt;/li>
&lt;% end -%>
&lt;/ul>

&lt;p>&lt;%= link_to 'New', :action => 'new' %>&lt;/p>

## app/views/dvd_covers/new.rhtml
&lt;h1>New DVD Cover&lt;/h1>

&lt;% form_for :dvd_cover, :url => { :action => 'create' }, :html => { :multipart => true } do |f| -%>
  &lt;p>&lt;%= f.file_field :uploaded_data %>&lt;/p>
  &lt;p>&lt;%= submit_tag :Create %>&lt;/p>
&lt;% end -%>

## app/views/dvd_covers/show.rhtml
&lt;p>&lt;%= @dvd_cover.filename %>&lt;/p>
&lt;%= image_tag @dvd_cover.public_filename, :size => @dvd_cover.image_size %></pre>
          <br/>
          <span style="color:red;">
            <a href="http://sayid2008.javaeye.com/blog/185959#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 23 Apr 2008 16:45:25 +0800</pubDate>
        <link>http://sayid2008.javaeye.com/blog/185959</link>
        <guid>http://sayid2008.javaeye.com/blog/185959</guid>
      </item>
      <item>
        <title>宝典：第三式 FCKeditor插件实现富文本编辑 </title>
        <author>sayid2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://sayid2008.javaeye.com">sayid2008</a>&nbsp;
          链接：<a href="http://sayid2008.javaeye.com/blog/185954" style="color:red;">http://sayid2008.javaeye.com/blog/185954</a>&nbsp;
          发表时间: 2008年04月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          首先下载<br /><pre name="code" class="RUBY">ruby script/plugin install svn://rubyforge.org/var/svn/fckeditorp/trunk/fckeditor</pre><br /><br />其他说明：<br />(1)FCKeditor安装在项目根目录下的vendor/plugins/fckeditor 里，<br />(2)README文件代有使用说明<br /><br />在你要使用是视图上添上<br /><pre name="code" class="ruby">
&lt;%= javascript_include_tag :fckeditor %></pre><br />或<br /><pre name="code" class="ruby">
&lt;%= javascript_include_tag "fckeditor/fckeditor" %></pre><br /><br />在需要富文本的Form表单用如下语句生成一个富文件编辑框：<br /><pre name="code" class="ruby">&lt;%= fckeditor_textarea("object", "field", :toolbarSet => 'Simple', :width => '100%', :height => '200px') %></pre><br /><br />说明：object对应模型对象,field对应它的字段。<br /><br /><br />如果是用了ajax，则需要在form_remote_tag加上一个before项<br /> <br /><pre name="code" class="ruby"> &lt;%= form_remote_tag(:update => update,
                      :before => fckeditor_before_js('topic', 'content'),
                      :url => {:controller => 'topics', :action => 'create', :template => 'show'} )%></pre><br /><br />并且富文件编辑框要加一个ajax=true的选项：<br /><br /><pre name="code" class="ruby">&lt;%= fckeditor_textarea(:topic, :content, :ajax => true, :toolbarKit => 'Simple', :width => '100%', :height => '600px') %></pre>
          <br/>
          <span style="color:red;">
            <a href="http://sayid2008.javaeye.com/blog/185954#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 23 Apr 2008 16:32:36 +0800</pubDate>
        <link>http://sayid2008.javaeye.com/blog/185954</link>
        <guid>http://sayid2008.javaeye.com/blog/185954</guid>
      </item>
      <item>
        <title>在想吃点东西真难</title>
        <author>sayid2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://sayid2008.javaeye.com">sayid2008</a>&nbsp;
          链接：<a href="http://sayid2008.javaeye.com/blog/158821" style="color:red;">http://sayid2008.javaeye.com/blog/158821</a>&nbsp;
          发表时间: 2008年01月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          服务员：欢迎光临本店，请问您要点什么？<br />客人：一个汉堡包;<br />服务员：辣的还是不辣的？<br />;客人：辣的;<br />服务员：您要是再增加两块钱就可以换成双层汉堡，可以吗?<br />客人：好的，双层汉堡。<br />;服务员：请问您还要点什么？<br />客人：薯条;<br />服务员：请问您需要大薯条、中薯条还是小薯条?<br />客人：中薯条。<br />服务员：请问您要几包？<br />客人：一包就可以了;<br />服务员：我们现在最新推出了薯条摇摇乐，您想试试吗？<br />客人：不需要，给我番茄酱就可以了。<br />服务员：两包番茄酱可以吗?<br />客人：要是可以的话，我想要两百包.<br />服务员：对不起先生，我们这里的番茄酱是限量供应的;<br />客人：那你跟我废话干什么！<br />服务员：对不起了先生，您还要点什么？<br />客人：饮料;<br />服务员：有雪碧红茶可乐芬达，您需要哪一种?<br />客人：可乐;<br />服务员：您要的是大杯中杯还是小杯还是瓶装？<br />客人：中杯;<br />服务员：需要加冰吗?<br />客人：需要;<br />服务员：加冰稍微多一点还是稍微少一点?<br />客人：差不多就可以/<br />服务员：那给您加稍微多一点可以吗?<br />客人:可以。谢谢;<br />服务员：不客气先生。我们最新推出的墨西哥鸡肉卷您不尝一尝吗？<br />客人：不了谢谢。<br />服务员：那么特价的劲爆鸡米花呢?<br />客人：也不要;<br />服务员：那么赠送机器猫的外带全家餐您要不要试一下？<br />客人：不需要谢谢;<br />服务员：那好，您是在这里吃还是带走先生？<br />客人：带走;<br />服务员：一共是二十一块零五毛先生，先生您有五毛钱吗？<br />客人：有;<br />服务员：好的先生，收您一百块零五毛，找您七十九块，差您两块钱，给您四张五毛的可以吗？<br />客人：好的。<br />服务员：谢谢您先生。欢迎您下次光临本店！<br />客人：可是我点的东西呢?<br />服务员：对不起先生，我们外带餐的包装袋暂时用完了，您在这里吃可以吗？<br />客人：。。。。。。。。<br />服务员：先生您还有什么要求吗？<br />客人：我真的想揍你一拳！<br />服务员：那么先生您想使用左勾拳右勾拳还是组合拳呢？<br />                    。。。。。。。。。。。
          <br/>
          <span style="color:red;">
            <a href="http://sayid2008.javaeye.com/blog/158821#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 23 Jan 2008 18:03:53 +0800</pubDate>
        <link>http://sayid2008.javaeye.com/blog/158821</link>
        <guid>http://sayid2008.javaeye.com/blog/158821</guid>
      </item>
      <item>
        <title>宝典：第二式 2.0之分页 will_paginate</title>
        <author>sayid2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://sayid2008.javaeye.com">sayid2008</a>&nbsp;
          链接：<a href="http://sayid2008.javaeye.com/blog/158550" style="color:red;">http://sayid2008.javaeye.com/blog/158550</a>&nbsp;
          发表时间: 2008年01月23日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          Rails分页plugin之will_paginate<br />搜索结果的分页显示是一个常用功能,实现方式有很多中,rails也内建了对分页的支持,但是<strong>rails2.0</strong>将去掉分页组件,将分页功能交给plugin去实现,这里通过一个简单的例子展示如何使用最流行的rails分页plugin -- will_paginate.<br /><br />1.安装will_paginate,编写分页代码<br />安装:<br /><br /><em>ruby script\plugin install svn://errtheblog.com/svn/plugins/will_paginate</em>安装成功后,开始编写分页代码<br /><br />修改products_controller.rb,找到index方法<br /><pre name="code" class="rails">
    @products = Product.paginate  :page => params[:page], 
                                  :per_page => 5</pre><br />保存加入翻页,修改app/view/products/index.rhtml,在最后加入一行<br /><pre name="code" class="rails">&lt;%= will_paginate @products %></pre><br />写好后打开页面即可看到看到现在显示前5个产品了和翻页了,试着点击next,previous进行翻页<br /><pre name="code" class="rails">&lt;%= will_paginate @products,:prev_label=> '上一页',:next_label=> '下一页' %></pre>可定义上下翻页显示<br /><br />4.加入搜索<br />在index.rhtml适当位置加入:<br /><pre name="code" class="rails">
&lt;% form_tag products_path, :method => 'get' do %>
  &lt;p>
    &lt;%= text_field_tag :search, params[:search] %>
    &lt;%= submit_tag "Search", :name => nil %>
  &lt;/p>
&lt;% end %></pre><br />这里注意,:method => 'get'必须指定, submit_tag的:name属性设为nil,避免在url中出现不必要的内容<br /><br />将products_controller.rb的index方法修改为<br /><pre name="code" class="rails">
   @products = Product.paginate  :page => params[:page], 
                                  :per_page => 5,
                                  :conditions => ["name like ?", "%#{params[:search]}%"]</pre>注意在加入搜索条件时的写法,这样可以避免sql注入,提高安全性<br /><br />试着进行搜索,可以看到搜索结果很好的进行了分页.<br />在此还提供一些分页统计信息<br /><pre name="code" class="rails">
统计信息：
共&lt;%=@products.total_entries%>条, 共&lt;%=@products.page_count %>页,当前第&lt;%= @products.current_page%>页.</pre>
          <br/>
          <span style="color:red;">
            <a href="http://sayid2008.javaeye.com/blog/158550#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 23 Jan 2008 10:11:59 +0800</pubDate>
        <link>http://sayid2008.javaeye.com/blog/158550</link>
        <guid>http://sayid2008.javaeye.com/blog/158550</guid>
      </item>
      <item>
        <title>宝典：第一式 表间关联easy</title>
        <author>sayid2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://sayid2008.javaeye.com">sayid2008</a>&nbsp;
          链接：<a href="http://sayid2008.javaeye.com/blog/157405" style="color:red;">http://sayid2008.javaeye.com/blog/157405</a>&nbsp;
          发表时间: 2008年01月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在一个程序中不可能只有一个数据表，而表多了之间的关联自然而然就有了<br />比如：Questions表与Answers表，显然是一对多的关系<br />如果你在Question和Answers的model中加上<br />M<br /><pre name="code" class="rails">

class Question &lt; ActiveRecord::Base
    has_many :answers 
    ......
end
</pre><br /><pre name="code" class="rails">
class Answer&lt; ActiveRecord::Base
    belongs_to :question
    ......
end
</pre><br />C<br /><pre name="code" class="rails">
class QuestionController &lt; ApplicationController
    layout 'base'
    def index
      @question= Question.find(1)  
      @answer = Answer.find(1)
    end
      ......
end
</pre><br />V中可以轻松的取到<br /><pre name="code" class="rails">
 &lt;%=@question.answers.answer_content%> #答案内容answer_content
 &lt;%=@answer.question.content%>    #问题内容content
</pre><br /><img src="/images/smiles/icon_wink.gif"/>
          <br/>
          <span style="color:red;">
            <a href="http://sayid2008.javaeye.com/blog/157405#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 18 Jan 2008 17:33:15 +0800</pubDate>
        <link>http://sayid2008.javaeye.com/blog/157405</link>
        <guid>http://sayid2008.javaeye.com/blog/157405</guid>
      </item>
      <item>
        <title>等的我好苦啊！</title>
        <author>sayid2008</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://sayid2008.javaeye.com">sayid2008</a>&nbsp;
          链接：<a href="http://sayid2008.javaeye.com/blog/157396" style="color:red;">http://sayid2008.javaeye.com/blog/157396</a>&nbsp;
          发表时间: 2008年01月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          这两个月以来一直都在学习Ruby on Rails， 而Javaeye便成了我最多来学习的地方，三天前注册好了就进入了漫长的3天等待<img src="/images/smiles/icon_smile.gif"/>。<br />        自学校出来3个多月认识了好多，感觉学校学的只有那么多用，出来了还是学习<img src="/images/smiles/icon_twisted.gif"/><img src="/images/smiles/icon_twisted.gif"/>以后没别的了，努力努力努力！<img src="/images/smiles/icon_idea.gif"/>
          <br/>
          <span style="color:red;">
            <a href="http://sayid2008.javaeye.com/blog/157396#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/115' target='_blank'><span style="color:red;font-weight:bold;">JavaEye图灵杯第2届问答大赛开始了！8月4日至8月17日，奖品丰厚！</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 18 Jan 2008 17:22:36 +0800</pubDate>
        <link>http://sayid2008.javaeye.com/blog/157396</link>
        <guid>http://sayid2008.javaeye.com/blog/157396</guid>
      </item>
  </channel>
</rss>