﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-笨小孩...................................................................................-随笔分类-Rails</title><link>http://www.blogjava.net/fl1429/category/38081.html</link><description>Java,Ruby,Php,Flex,Ajax,UI,Google,Twitter,Firefox,Ubuntu,Opensource,Designer,Blogger,Web2.0</description><language>zh-cn</language><lastBuildDate>Tue, 29 Dec 2009 05:32:26 GMT</lastBuildDate><pubDate>Tue, 29 Dec 2009 05:32:26 GMT</pubDate><ttl>60</ttl><item><title>Jquery pagination like twitter more button</title><link>http://www.blogjava.net/fl1429/archive/2009/09/25/296448.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Fri, 25 Sep 2009 08:50:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/09/25/296448.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/296448.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/09/25/296448.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/296448.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/296448.html</trackback:ping><description><![CDATA[环境：ruby 1.8.7 + rails 2.1.0 + jquery + ubuntu 8.10<br /><br />效果和xiaonei的&nbsp; 更多新鲜事&nbsp; 一样：<br /><img style="max-width: 800px;" src="http://www.blogjava.net/images/blogjava_net/fl1429/snapshot29.png" /><br /><br />前面有篇文章也介绍了一个像 twitter more 的方式分页的方法，不过那个是用 protorype 做的。。那个做起来简单一点，因为rails给我们封装了 insert_html 和 link_to_remote 等方法，这样更加便捷，但是解决jquery 和 prototype的confilct是一件很让人头疼的事，索性今天又实现了一个基于 jquery 的方法,环境是在rails中，需要使用 will_paginate 插件：<br />Demo:<br /><br />view:<br /><br />&lt;script&gt;<br />(function($){<br />&nbsp;&nbsp;&nbsp; var settings;<br /><br />&nbsp;&nbsp;&nbsp; $.bottomlessPagination = function(callerSettings) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; settings = $.extend({<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ajaxLoaderPath:'/images/loading.gif',<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; results:'.results', // results 返回结果外部的class <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objName:'',<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; callback:null<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },callerSettings||{});<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; settings.imgLoader = new Image();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; settings.imgLoader.src = settings.ajaxLoaderPath;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; settings.href = $(".current").next().attr("href"); //current 是 will_paginate 默认的当前页 href 的名字<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($('div.pagination').size() &gt; 0){ // pagination 是 will_paginate 默认的 class<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $('div.pagination').wrap("&lt;div class='pagination_links'&gt;&lt;/div&gt;").hide();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $('.pagination_links').append(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;div class='live_pagination'&gt;" +<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;a class='more_links' style='cursor:pointer;'&gt; 查看 " + settings.objName + "...&lt;/a&gt;" +<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;/div&gt;"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(".more_links").click(function(){&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(".live_pagination").hide();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ($(".now_loading").size() == 0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(".more_links").after("&lt;img class='now_loading' src='"+settings.imgLoader.src+"' /&gt;");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(".now_loading").show();&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $.get(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; settings.href,'',function(data){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(settings.results).addrows(data);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(".now_loading").hide();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(".live_pagination").show();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ); <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $.fn.addrows = function(data) {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //remove live pagination if there are no more results<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // alert(data.length);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (data.length === 1 ){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // alert(data.length);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $('.live_pagination').remove();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $('.pagination_links').append(<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;div class='no_pagination'&gt;" +<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "没有" + settings.objName +<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "&lt;/div&gt;"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; );<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //change the href<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ind=settings.href.indexOf("page=");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; page=parseInt(settings.href.charAt(ind+5))+1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; start=settings.href.slice(0,ind+5);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; stop=settings.href.slice(ind+6);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; settings.href=start.concat(page.toString()).concat(stop);<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //add results to the page<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $(settings.results).append(data);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (settings.callback) settings.callback();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; };<br />&nbsp;&nbsp;&nbsp; };<br />})(jQuery);<br />&lt;/script&gt;<br /><br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div class="results"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;%= render :partial =&gt; 'activity' , :collection =&gt; @all_feed&nbsp; %&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/div&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;%= will_paginate @all_feed&nbsp; ,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :class =&gt; 'pagination',&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :previous_label =&gt; '&amp;laquo; Previous',<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :next_label&nbsp;&nbsp;&nbsp;&nbsp; =&gt; 'Next &amp;raquo;',<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :renderer =&gt; 'WillPaginate::LinkRenderer' %&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;div&gt;<br />&lt;div class="now_loading" style="display:none;"&gt;<br />&nbsp; &lt;img src="http://www.blogjava.net/images/loading.gif"&gt;&lt;/img&gt;<br />&lt;/div&gt;<br />&lt;script&gt; <br />&nbsp; $.bottomlessPagination({objName:'更多更新', callback:function(){<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //highlight current row<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //&nbsp; $("div.results").effect("highlight", {}, 3000);<br />&nbsp;&nbsp;&nbsp; }});<br />&lt;/script&gt;<br /><br /><br /><br />Action:<br />def index<br /><br />&nbsp;&nbsp;&nbsp; if request.xhr?&nbsp;&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sleep(1) # make request a little bit slower to see loader :-)&nbsp; &nbsp; <br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; render :partial =&gt; 'activity' , :collection =&gt; @all_feed<br />end<br /><br /><br />partial:_activity.html.erb<br />partial 里输出数据即可<br /><br /><br />主要的注意点就是注意对应class 不要写错了，同样，你也可以把class 换位id做，jquery取id就这样： $("#ID")<br /><br />上面js文件下载：<br />http://www.dbank.com/download.action?k=3094283bf64e445f9530ac0554ebc9ce<br /><br />ref:<br />http://github.com/davidwparker/jquery-bottomless-pagination<br /><br /><br /><div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=b54f0c4a-03a9-8cee-a7fe-ec925f9e6978" /></div><img src ="http://www.blogjava.net/fl1429/aggbug/296448.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-09-25 16:50 <a href="http://www.blogjava.net/fl1429/archive/2009/09/25/296448.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Rails sphinx + libmmseg + ultrasphinx 全文检索</title><link>http://www.blogjava.net/fl1429/archive/2009/09/22/296066.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Tue, 22 Sep 2009 09:46:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/09/22/296066.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/296066.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/09/22/296066.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/296066.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/296066.html</trackback:ping><description><![CDATA[上一遍介绍了 thinking_sphix 的使用，这次来介绍 ultrasphinx 的使用，二者都是 对sphinx的封装，都是rails的plugin，为了更好的利用rails调用sphinx方法。。。<br /><br />前面的配置一样<br /><br />Demo:<br />1,安装 chronic<br />gem install chronic<br /><br />2,安装插件<br />ruby script/plugin install&nbsp; svn://rubyforge.org/var/svn/fauna/ultrasphinx/trunk <br />这个是网上提供的方法，目前似乎找不到这个源了。。建议直接从github download 下载<br />http://github.com/fauna/ultrasphinx<br /><br />3，安装完Ultrasphinx之后，将： <br />vendor/plugins/ultrasphinx/examples/default.base <br />复制到： <br />config/ultrasphinx/default.base <br />将其中的： <br />charset_type = utf-8 <br />改为： <br />charset_type = zh_cn.utf-8 <br /><br />并且在charset_type设置的下面加入一行： <br />charset_dictpath =&nbsp; /home/feng/RailsProject/Search/lib&nbsp;  ＃ 你uni.lib 字典所在的路径<br />然后删除所有charset_table的设置。 <br /><br />4，Model<br />&nbsp; is_indexed :fields =&gt; ['created_at', 'name']<br />&nbsp; is_indexed :fields =&gt; ['created_at', 'content']<br /><br />5，action<br />&nbsp; def index<br /># thinking_sphinx<br />#&nbsp;&nbsp;&nbsp; @articles = Article.search params[:search], :include =&gt; :author, :match_mode =&gt; :boolean<br />#ultrasphinx<br />&nbsp;&nbsp;&nbsp; @search = Ultrasphinx::Search.new(:query =&gt; params[:search])<br />&nbsp;&nbsp;&nbsp; @search.run<br />&nbsp;&nbsp;&nbsp; @articles = @search.results<br />&nbsp; end<br /><br />6,生成配置文件： <br /><strong>rake ultrasphinx:configure</strong> <br />在config/ultrasphinx下创建了一个development.conf，这个文件就是Sphinx的配置文件。 <br /><br />7,创建索引： <br /><strong>rake ultrasphinx:index</strong> <br />索引创建在了 default.base 中你定义的path 路径下<br /><br />8， 启动Sphinx的searchd服务： <br /><strong>rake ultrasphinx:daemon:start</strong> <br /><br />对应的停止是&nbsp; <strong>rake ultrasphinx:daemon:stop</strong><br /><br />9,启动webrick<br /><br />ok了。。。<br />项目下载：<br />http://www.uushare.com/user/fl1429/file/2043752<br /><br />ref:<br />http://www.javaeye.com/topic/200065?page=1<br />http://github.com/fauna/ultrasphinx<br /><br /><br /><br /><br /><div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=82f41e76-5bc6-8655-a78f-c09741217728" /></div><img src ="http://www.blogjava.net/fl1429/aggbug/296066.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-09-22 17:46 <a href="http://www.blogjava.net/fl1429/archive/2009/09/22/296066.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Rails sphinx + libmmseg + thinking_sphinx 全文检索</title><link>http://www.blogjava.net/fl1429/archive/2009/09/22/296052.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Tue, 22 Sep 2009 09:15:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/09/22/296052.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/296052.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/09/22/296052.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/296052.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/296052.html</trackback:ping><description><![CDATA[环境: sphinx 0.9.8 rc2 + libmmseg 0.7.3 + thinking_sphinx 1.2.8 + ubuntu 8.1.0 Desktop version<br />
<br />
效果预览：<br />
1， http://www.zikii.com/ 这个网站 也是基于 sphinx 实现的<br />
2，我的<br />
<img style="max-width: 800px;" src="http://www.blogjava.net/images/blogjava_net/fl1429/snapshot28.png" alt="" /><br />
<br />
<br />
由于项目需要，需要实现站内搜索，全文检索和 中文分词 功能，最后选型了 sphinx + libmmseg + thinking_sphinx ， 折腾了好大一会，最后测试成功<br />
sphinx 是俄国人开发的opensourse 搜索引擎，索引速度很快， libmmseg 是中国人开发的中文分词程序，thinking_sphinx 是封装调用sphinx的rails plugin<br />
<br />
下面用到的所有资源 打包下载：<br />
http://www.uushare.com/user/fl1429/file/2043579<br />
<br />
1，项目的所有的源码编译安装 ， 全部移到 /root 下进行,凡是出现权限不够的， 在命令前加上 sudo <br />
<br />
2，安装 libmmseg<br />
<br />
./configure<br />
make<br />
make install <br />
具体可以参考：<br />
http://www.coreseek.cn/opensource/mmseg/<br />
<br />
3,安装 ruby 扩展，进入 mmseg ruby 目录下 （注意最后面有一个点）<br />
<br />
cd ruby<br />
cp /usr/local/include/mmseg/*.h .   <br />
<pre>cp ../src/*.h .   <br />
<br />
cp ../src/css/*.h .   <br />
ruby extconf.lin.rb<br />
make<br />
sudo make install<br />
成功的话，可以到irb下，测试看看是否成功了<br />
irb&nbsp; <br />
require 'mmseg'<br />
注意:如果在这一步出错,且出错提示为：<br />
<br />
css/UnigramCorpusReader.cpp:89: error: &#8217;strncmp&#8217; was not declared in this scope<br />
<br />
则需手工编辑.src/css目录下UnigramCorpusReader.cpp 文件,在其第一行加上<br />
<br />
#include &lt;string.h&gt;<br />
<br />
然后重新 make,即可通过<br />
<br />
4，创建辞典文件<br />
<br />
进入 mmseg 的 data 目录下<br />
<br />
mmseg -u unigram.txt<br />
<br />
把生成的文件名改为 uni.lib<br />
<br />
5,安装sphinx (把两个补丁放入 解压后 的 sphinx下)<br />
<br />
cd sphinx-0.9.8-rc2<br />
<br />
patch -p1 &lt; sphinx-0.98rc2.zhcn-support.patch  ＃patch中文补丁<br />
<br />
patch -p1 &lt; fix-crash-in-excerpts.patch # patch 防crash 补丁<br />
<br />
Copy mmseg安装文件夹下 src/csr_typedefs.h 和<br />
<br />
src/css/SegmenterManager.h 到Sphinx安装文件夹下的 src<br />
<br />
文件夹下<br />
<br />
./configure<br />
<br />
make<br />
sudo make install<br />
<br />
注意：如果在这一步出现<br />
<br />
/usr/local/include/mmseg/freelist.h:22: error: &#8216;strlen&#8217; was not declared in this scope<br />
<br />
的错误，手工修改 /usr/local/mmseg/include/mmseg/freelist.h<br />
<br />
在上面添加<br />
#include &lt;string.h&gt;<br />
<br />
以上的配置 sphinx 就支持 中文分词 搜索了。。。<br />
<br />
Demo:<br />
<br />
1,依照 Ryan 的例子 配置 好基本的英文搜索 <br />
<br />
http://railscasts.com/episodes/120-thinking-sphinx<br />
<br />
2，重点是 model 里的 定义索引 <br />
<br />
define_index do<br />
<br />
indexes content<br />
indexes :name, :sortable =&gt; true<br />
indexes comments.content, :as =&gt; :comment_content<br />
indexes [author.first_name, author.last_name], :as =&gt; :author_name<br />
has author_id, created_at<br />
end<br />
<br />
3，把上面生成的 uni.lib 辞典文件 拷入 项目的 lib 下 （或者别的地方，看你配置里的charset_dictpath的,不编译的话，可以用别人现成的uni.lib）<br />
<br />
4，在项目的 config 下新建一个 sphinx.yml 文件<br />
development: &amp;my_settings<br />
enable_star: 1<br />
min_prefix_len: 0<br />
min_infix_len: 2<br />
min_word_len: 1<br />
max_results: 70000<br />
morphology: none<br />
listen: localhost:3312<br />
charset_dictpath: /home/feng/RailsProject/Search/lib<br />
test:<br />
&lt;&lt;: *my_settings<br />
production:<br />
&lt;&lt;: *my_settings<br />
<br />
上面的<br />
/home/feng/RailsProject/Search/lib 可以写成  "#{RAILS_ROOT}/lib"<br />
5，生成配置文件<br />
<br />
rake ts:config<br />
<br />
&nbsp;这样config 下会生成一个 development.sphinx.conf 文件<br />
<br />
找到 charset_type = utf-8 把后面 utf-8 修改为 zh_cn.utf-8,并在下面添加如下语句<br />
<br />
charset_dictpath = /home/feng/RailsProject/Search/lib （你工程的lib路径）<br />
<br />
6，建立索引<br />
<br />
rake&nbsp;ts:index INDEX_ONLY=true<br />
注意后面必须添加  INDEX_ONLY=true不然的话，配置文件会被重置,还有不要写成 INDEX_ONLY = true<br />
<br />
<br />
7，启动sphinx服务<br />
<br />
rake ts:start<br />
8,启动webrick <br />
<br />
注意，sphinx 必须在webrick的前面 先启动<br />
我的demo项目，其实就是上面ryan 的，下载后可以看到我的具体配置，或者详细的内容<br />
<br />
http://www.uushare.com/user/fl1429/file/2043752<br />
<br />
<br />
ref:<br />
http://wiki.github.com/cogentsoft/zbs/180787<br />
http://www.javaeye.com/topic/431217?page=1<br />
http://www.javaeye.com/topic/196451<br />
http://blog.sina.com.cn/s/blog_412d58ec010090pq.html<br />
http://freelancing-god.github.com/ts/en/rake_tasks.html<img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=0d347e6f-bad1-84f2-b63e-e0138c655057" /></pre>
<img src ="http://www.blogjava.net/fl1429/aggbug/296052.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-09-22 17:15 <a href="http://www.blogjava.net/fl1429/archive/2009/09/22/296052.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Rails Jquery scrolling pagenation</title><link>http://www.blogjava.net/fl1429/archive/2009/09/08/294299.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Tue, 08 Sep 2009 06:29:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/09/08/294299.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/294299.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/09/08/294299.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/294299.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/294299.html</trackback:ping><description><![CDATA[环境 ：<br />ruby 1.8.7 + Rails 2.1.0 + ubuntu 8.1.0<br /><br />效果：<br />http://www.dzone.com/links/index.html<br />http://flexidev.co.za/projects/jqpageflow/<br />http://paperc.de/documents<br /><br />像上面的三个网站 的分页效果 就是 scrolling pagination , 或者 叫 pageless pagination , endless pagination 用这些作为关键字， 都会搜到很多的demo， 这里我介绍 一种 demo，开发 环境 是 rails ，of course , 你也可以在其他的平台使用。。<br /><br />最用 一直在用各种 分页的效果，一般都是 ajax的， 例如前面 有介绍了 prototype pagenation like twitter more button, 还有 jquery ajax pagenation,这里又是 jquery scrolling pagination.....<br /><br />Demo:<br /><br />依赖库:<br />will_paginate 插件<br />jquery.js<br />jquery.pageless.js<br /><br />请到 下面的 那个 ref link 里下<br /><br />Action:<br /><br />&nbsp;<font color="#3366ff">def show<br />&nbsp;&nbsp;&nbsp; @client_info = ClientInfo.find(params[:id])<br />&nbsp;&nbsp;&nbsp; @comments = @client_info.comments.paginate(:per_page =&gt; 5 , :page =&gt; params[:page]) <br /><br />&nbsp;&nbsp;&nbsp; if request.xhr?<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sleep(2) # make request a little bit slower to see loader :-)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; render :partial =&gt; 'comment' , :collection =&gt; @comments #返回 数据的partial<br />&nbsp;&nbsp;&nbsp; end<br />end</font> <br /><br />解释 ： server 端<br /><br />helper method :<br /><br />&nbsp; <font color="#3366ff"># scrolling paginate like greader<br />&nbsp; def pageless(total_pages, url=nil)<br />&nbsp;&nbsp;&nbsp; opts = {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :totalPages =&gt; total_pages,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :url&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =&gt; url<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #:loaderMsg&nbsp; =&gt; '加载中...'<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; javascript_tag("$('#ajaxcomments').pageless(#{opts.to_json});")<br />&nbsp; end</font><br /><br />解释; 封装了一个 pageless 方法，即实现 scrolling load 的的方法<br /><br />view: show.html.erb<br /><br /><font color="#3366ff">..............<br />&nbsp;&lt;%= render :partial =&gt; 'wall' %&gt;<br />.........................</font><br /><br />解释 ： 前端 view<br /><br /><br />partial : _wall.html.erb<br /><br />&nbsp; <font color="#3366ff">&lt;div class="wall" id ="ajaxcomments"&gt;<br />&nbsp;&nbsp;&nbsp; &lt;%- unless @client_info.comments.empty? -%&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;%= render :partial =&gt; 'comment', :collection =&gt; @comments %&gt;<br />&nbsp;&nbsp;&nbsp; &lt;%- end -%&gt;<br />&nbsp;&nbsp;&nbsp; &lt;%= will_paginate @comments&nbsp; ,<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :class =&gt; 'pagination',<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :previous_label =&gt; '&amp;laquo; Previous',<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :next_label&nbsp;&nbsp;&nbsp;&nbsp; =&gt; 'Next &amp;raquo;',<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :renderer =&gt; 'WillPaginate::LinkRenderer' %&gt; &lt;%#= pageless must use will_paginate default style %&gt;<br />&nbsp;&nbsp;&nbsp; &lt;%= pageless(@comments.total_pages, client_info_path(@client_info))&nbsp; %&gt;<br />&nbsp; &lt;/div&gt;<br /></font><br />解释 ： 注意这里需要 定义 一个 id， 还有 就是 will_paginate 里的那些 参数 可以 不要 的，这里我加的，是因为 我的 enviroment.rb 中 加了 will_paginate 的 配置，如果 你没有的话， 可以去掉的<br />partial : _comment.html.erb<br /><font color="#3366ff">..............<br />&lt;%= display comment.body %&gt;<br />.........................</font><br />解释 ： 显示的 内容<br /><br />ref :<br />http://github.com/jney/jquery.pageless/tree/master<br /><br /><br /><div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=420768cb-0a5a-8752-8d30-6851785bc2ec" /></div><img src ="http://www.blogjava.net/fl1429/aggbug/294299.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-09-08 14:29 <a href="http://www.blogjava.net/fl1429/archive/2009/09/08/294299.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Rails 很好用的锚(anchor)标记</title><link>http://www.blogjava.net/fl1429/archive/2009/09/04/293927.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Fri, 04 Sep 2009 10:35:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/09/04/293927.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/293927.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/09/04/293927.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/293927.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/293927.html</trackback:ping><description><![CDATA[锚(anchor)标记 很好用，虽然现在一般好多都是 ajax 无刷新 更新。。但是如何 你没有 采用 ajax 方法提交数据和更新的话，那么 anchor是你的最佳选择了，看上去有点像ajax的效果<br />
<br />
anchor 说白了 就是 进入 这个 页面的时候， 定位到页面指定的部分，例如一个个人用户的界面，最下面是留言版，如果你采用传统的方式提交留言的话，那么就可以使用anchor定位提交后显示的位置<br />
<br />
使用方法：<br />
<br />
1,url标识<br />
<br />
a href = ............./network#Comment<br />
<br />
network.html.erb<br />
&lt;a name="Comment"&gt;&lt;/a&gt;<br />
<br />
只要在network.erb.html 页面中加入&nbsp; 上面 那句话， 加在哪里 就定位显示在哪了,或者 指定一个 div的id值为 Comment 即可<br />
<br />
2，rails 自带的 :anchor 参数<br />
<br />
url or path :<br />
&nbsp;user_path(@user,:anchor =&gt; 'Comment')<br />
&nbsp;user_url(@user,:anchor =&gt; 'Comment')<br />
<br />
上面在rails RESTful 架构的程序中 经常 可见这种路径写法，那么你可以利用 :anchor 来标识。。。<br />
<br />
<div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=03da1f1b-1570-8078-91db-bf6b549447b6" /></div>
<img src ="http://www.blogjava.net/fl1429/aggbug/293927.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-09-04 18:35 <a href="http://www.blogjava.net/fl1429/archive/2009/09/04/293927.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>rails jquery autocomplete</title><link>http://www.blogjava.net/fl1429/archive/2009/09/04/293880.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Fri, 04 Sep 2009 06:40:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/09/04/293880.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/293880.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/09/04/293880.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/293880.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/293880.html</trackback:ping><description><![CDATA[效果：<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/fl1429/snapshot26.png" width="541" height="216" /><br />
<br />
记得以前文章写过 rails autocomplete 插件的使用方法， 那个是基于 prototype 的， 平时Jquery用的最多。。所以必须用jquery 实现 ， 这样的 demo 网上太多。。。。下面介绍在rails 中的一种solution<br />
<br />
需要的：<br />
jquery.js<br />
jquery.complete.js<br />
jquery.autocomplete.css<br />
<br />
demo :<br />
<br />
View:<br />
<br />
<font color="#3366ff">&lt;script&gt;<br />
&nbsp; $(document).ready(function() {<br />
&nbsp;&nbsp;&nbsp; $("#recipient").autocomplete("/myaccount/res_message", {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delay:10,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; minChar: 1,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; multiple: true,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; parse: function(data) {&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return $.map(eval(data), function(item) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data: item,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; value: item.name,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result: item.name<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; });<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; },<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; formatItem: function(item) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return item.show;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; }).result(function(e, item)<br />
&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $("#recipient").val(item.name);<br />
&nbsp;&nbsp;&nbsp; });<br />
&nbsp; });<br />
&lt;/script&gt;<br />
&lt;p&gt;&lt;%= text_field_tag :recipient, :id =&gt; 'recipient' %&gt;&lt;/p&gt;<br />
</font><br />
<br />
解释：<br />
#recipient 是对应的 id<br />
/myaccount/res_message 对应请求的 url<br />
item是参数<br />
name 和 show 是 返回的变量<br />
<br />
action:<br />
&nbsp; <font color="#3366ff">def res_message<br />
<br />
&nbsp;&nbsp;&nbsp; key = params[:q] if params[:q]<br />
&nbsp;&nbsp;&nbsp; @result = ClientInfo.get_login_name(key, '' , 'key')<br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; respond_to do |format|<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format.js # default : res_message.js.erb<br />
&nbsp;&nbsp;&nbsp; end<br />
&nbsp; end</font><br />
<br />
解释 params[:q]&nbsp; q 是默认向后台发送的关键字查询 参数， 并且默认的limit 是10 条数据<br />
<br />
view:res_message.js.erb<br />
<font color="#3366ff"></font><br />
&lt;% if @result -%&gt;<br />
&lt;% i=0 %&gt;[<br />
&nbsp; &lt;% for result in @result %&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;% if i==0 %&gt;<br />
&nbsp;&nbsp;&nbsp; {name:"&lt;%= result.login_name %&gt;",show:"&lt;%= result.login_name + " " %&gt;" + "&lt;%= result.sure_name.nil? ? " " : result.sure_name + " " %&gt;"}<br />
&nbsp;&nbsp;&nbsp; &lt;% else %&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ,{name:"&lt;%= result.login_name %&gt;",show:"&lt;%= result.login_name + " " %&gt;" + "&lt;%= result.sure_name.nil? ? " " : result.sure_name + " " %&gt;"}<br />
&nbsp;&nbsp;&nbsp; &lt;% end %&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;% i+=1 -%&gt;<br />
&nbsp; &lt;% end -%&gt;]<br />
&lt;% end -%&gt;<br />
<br />
解释： 该view 是返回的数据，返回的是一个JSON数组<br />
<br />
具体详细的可以参考：<br />
http://docs.jquery.com/Plugins/Autocomplete<br />
http://view.jquery.com/trunk/plugins/autocomplete/demo/<br />
<br />
<br />
&nbsp;<br />
<br />
<div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=52408855-4311-8ca1-9c8d-3d51b8a3f89c" /></div>
<img src ="http://www.blogjava.net/fl1429/aggbug/293880.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-09-04 14:40 <a href="http://www.blogjava.net/fl1429/archive/2009/09/04/293880.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Rails will_paginate ajax pagination with jquery</title><link>http://www.blogjava.net/fl1429/archive/2009/08/25/292522.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Tue, 25 Aug 2009 07:28:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/08/25/292522.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/292522.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/08/25/292522.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/292522.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/292522.html</trackback:ping><description><![CDATA[环境: ruby 1.8.7 + rails 2.1.0 + &gt; = jquery 1.3.2<br />
<br />
效果预览：<br />
<img style="max-width: 800px;" src="http://www.blogjava.net/images/blogjava_net/fl1429/snapshot25.png" alt="" /><br />
<br />
一般 我们 在rails 中 分页 will_paginate 是必不可少的插件，但是 一般都是基于 prototype 的，例如 ajax 式的分页， 通过 RemoteLinkRenderer改变 css 样式等等，都是 基于prototype 的，但是 prototype 和 Jquery 在项目中 经常遇到conflict ，这个 很 让人 头疼，rails 封装好的ajax方法，好多 都因为 jquery 不能用，jquery 那么 好 前端 用户体验，又因为 prototype 出现 conflict ， 哎 为什么 相互残杀 呢。。。。。<br />
<br />
上面实现的核心思想 是 前端 通过 jquery的 异步调用数据， 后台 rails 通过 respond_to fotmat.js 的方式 给予 返回数据。。。<br />
<br />
Demo:<br />
<br />
layout 中导入：<br />
<font color="#3366ff">&nbsp;&nbsp;&nbsp; &lt;%= stylesheet_link_tag 'pagination' -%&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;%= javascript_include_tag 'jquery' %&gt;</font><br />
pagination 是改变分页的样式<br />
<br />
<br />
Action:<br />
<br />
<font color="#3366ff">&nbsp; def index<br />
&nbsp;&nbsp;&nbsp; @products = Product.paginate(:per_page =&gt; 10, :page =&gt; params[:page])<br />
&nbsp;&nbsp;&nbsp; respond_to do |format|<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format.html&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #default : index.html.erb<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format.js {:layout =&gt; false} # default : index.js.erb<br />
&nbsp;&nbsp;&nbsp; end<br />
&nbsp; end</font><br />
<br />
View:<br />
<br />
index.html.erb<br />
<br />
<font color="#3366ff">&lt;div id="product"&gt;<br />
&nbsp; &lt;%= render :partial =&gt; 'products' %&gt;<br />
&lt;/div&gt;<br />
</font><br />
index.js.erb<br />
<br />
<font color="#3366ff">$("#product").html("&lt;%= escape_javascript(render :partial =&gt; "products") %&gt;");<br />
</font><br />
escape_javascript 是转义的意思 和 &lt;%=h %&gt; 这里的 h 差不多<br />
<br />
partial :<br />
_products.html.erb<br />
<br />
&lt;script&gt;<br />
<br />
<font color="#3366ff">$(function() {<br />
&nbsp; $(".apple_pagination a").live("click", function() {<br />
&nbsp;&nbsp;&nbsp; $(".apple_pagination").html("Page is loading...");<br />
&nbsp;&nbsp;&nbsp; $.get(this.href, null, null, "script");<br />
/* alert(this.href); */<br />
&nbsp;&nbsp;&nbsp; return false;<br />
&nbsp; });<br />
});<br />
<br />
&lt;/script&gt;<br />
<br />
&lt;%= will_paginate @products , :class =&gt; 'apple_pagination' ,:previous_label =&gt; '&lt;&lt;上一页', :next_label =&gt; '下一页&gt;&gt;'&nbsp;&nbsp; :renderer&nbsp; =&gt; 'WillPaginate::LinkRenderer' %&gt;<br />
<br />
&lt;% for product in @products&nbsp; %&gt;<br />
&nbsp; &lt;div class="product"&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;h3&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;%= link_to h(product.name), product %&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;%= number_to_currency(product.price) %&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/h3&gt;<br />
&nbsp; &lt;/div&gt;<br />
&lt;% end %&gt;</font><br />
<br />
上面的 $(".apple_pagination a")&nbsp; 即是 will_paginate 的 :class ，：renderer 使用的是will_paginate 的default 的，如果 enviroment.rb 中配置了will_paginate的样式，这里不写 :renderer 会出错！，具体默认的参数 可以查看 will_paginate 下的 view_helpers.rb<br />
<br />
全部 源码 下载：<br />
http://www.uushare.com/user/fl1429/file/1941241<br />
<br />
配置方法：<br />
1，进入工程， rake setup<br />
2,ruby script/server <br />
3,okay 成功 了。。。。<br />
<br />
补充 ： 如果 一个 页面 有两处需要 分页，那么 will_paginate 默认 情况下 是同时翻页的。。那么 如何 避免呢。。只需要 给各自的 will_paginate 指定 不同的 class 即可&nbsp; 例如<br />
<br />
will_paginate : <br />
<br />
&lt;%= will_paginate collection ,<br />
&nbsp; :class =&gt; "apple_paginate my_paginate",<br />
&nbsp; :previous_label =&gt; '&lt;&lt;上一页',<br />
&nbsp; :next_label =&gt; '下一页&gt;&gt;' ,<br />
&nbsp; :renderer&nbsp; =&gt; 'WillPaginate::LinkRenderer'&nbsp; %&gt;<br />
<br />
apple_paginate 是 分页的真正的 css，my_paginate 是为了 区别 不同区的 分页 而加的<br />
<br />
<br />
jquery script : <br />
&nbsp; jQuery(function() {<br />
&nbsp;&nbsp;&nbsp; jQuery(".my_paginate a").live("click", function() {&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jQuery(".my_paginate").html("正在加载...");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; jQuery.get(this.href, {flag : "my" }, null, 'script');<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;<br />
&nbsp;&nbsp;&nbsp; });<br />
&nbsp; });<br />
<br />
注意 jquery get 方法的 四个参数 的 意义<br />
<br />
ref:<br />
http://railscasts.com/episodes/174-pagination-with-ajax<br />
http://soylentfoo.jnewland.com/articles/2007/09/17/resource_this-dry-rails-resource-controllers<br />
http://book.csdn.net/bookfiles/375/10037514155.shtml<br />
http://stackoverflow.com/questions/1268383/format-js-with-rails<br />
<br />
<br />
<br />
<div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=a6746d3c-c1d8-8615-9f87-135874cf4d7f" /></div>
<img src ="http://www.blogjava.net/fl1429/aggbug/292522.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-08-25 15:28 <a href="http://www.blogjava.net/fl1429/archive/2009/08/25/292522.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ruby  p , puts 和 print  的区别</title><link>http://www.blogjava.net/fl1429/archive/2009/08/24/292387.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Mon, 24 Aug 2009 07:12:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/08/24/292387.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/292387.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/08/24/292387.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/292387.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/292387.html</trackback:ping><description><![CDATA[在rails 开发中，最基本的检测错误的方法，莫过于 puts 和 p 的输出了。。。。那么 它们有什么区别呢。。。<br /><br />查了下， 说 p 是经过 inspect 的，inspect的字面意思是 检查 ，貌似 是检查 占位符 ，但是还是云里雾里<br /><br />看两个demo<br /><br />one：<br /><br /> <font color="#3366ff">p "a", "\nb" <br />结果：<br />"a"<br />"\nb"</font><br /><br />two:<br /><br /><font color="#3366ff">class SomeClass<br />&nbsp; def initialize (arg_1, arg_2) # called with SomeClass.new<br />&nbsp;&nbsp;&nbsp; @member_1 = arg_1<br />&nbsp;&nbsp;&nbsp; @member_2 = arg_2<br />&nbsp; end<br />&nbsp; def print&nbsp; <br />&nbsp; puts "member_1: " + @member_1<br />&nbsp;&nbsp;&nbsp; puts "member_2: " + @member_2<br />&nbsp; end<br />end<br /><br />sc1 = SomeClass.new('foo', 'bar')<br />puts sc1.inspect<br />p sc1<br />puts sc1</font><br /><br />结果：<br />#&lt;SomeClass:0xb7c091b4 @member_1="foo", @member_2="bar"&gt;<br />#&lt;SomeClass:0xb7c091b4 @member_1="foo", @member_2="bar"&gt;<br />#&lt;SomeClass:0xb7c091b4&gt;<br /><br />还有就是我们 最常用到的。。。查询数据库中一条数据记录集<br /><br /><font color="#3366ff">@post = BlogPost.find(params[:id])<br />&nbsp;&nbsp;&nbsp; p @post<br />&nbsp;&nbsp;&nbsp; puts @post</font><br />结果：<br />#&lt;BlogPost id: 18, blog_id: 30, topic_id: nil, client_info_id: nil, title: "测试", body: "测试测试测试测试测试测试测试测试测...", blog_post_comments_count: 0, type: "BlogPost", created_at: "2009-08-24 03:56:27", updated_at: "2009-08-24 03:56:27"&gt;<br />#&lt;BlogPost:0xb595b8b0&gt;<br /><br />这样 看起来 更一目了然。。。,p 把数据库中的 字段 和值 都输出 了， puts 只输出 一个 对象的标识。。。<br /><br />ref：<br />http://www.adp-gmbh.ch/ruby/language/inspect.html<br />http://stackoverflow.com/questions/1255324/p-vs-puts-in-ruby<br />http://blog.chinaunix.net/u1/37038/showart_489434.html<br /><br /><br /><br /><div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=718b3570-1a39-8380-a6f8-67230382eb82" /></div><img src ="http://www.blogjava.net/fl1429/aggbug/292387.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-08-24 15:12 <a href="http://www.blogjava.net/fl1429/archive/2009/08/24/292387.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ruby 中英文混合 截取字符串</title><link>http://www.blogjava.net/fl1429/archive/2009/08/24/292371.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Mon, 24 Aug 2009 06:23:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/08/24/292371.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/292371.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/08/24/292371.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/292371.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/292371.html</trackback:ping><description><![CDATA[环境 ： ruby 1.8.7 + rails 2.1.0 +&nbsp; ubuntu 8.10<br />
ruby 在截取 中文字符串时 经常出现乱码&nbsp; 。例如：<br />
<br />
<font color="#3366ff">a = "测a试 中文aaa"<br />
b = 'test'<br />
<br />
p a.size # 17 （可以看出一个中文字符在ruby中是3个英文字符）<br />
p b.length # 4<br />
puts a.slice(0,13) # 测a试 中�&nbsp; slice method （0是start下标处，13是length）</font><br />
<br />
最后一个输出最后 是乱码，在java中是unicode编码就没有这个问题，所以我们需要转换下编码来解决。。<br />
<br />
例如在rails的 application_helper.rb 定义一个转换的方法<br />
<br />
&nbsp; <font color="#3366ff">def cut_string(charset,src,start,length)<br />
&nbsp;&nbsp;&nbsp; require "iconv"<br />
&nbsp;&nbsp;&nbsp; @conv=Iconv.new("UTF-16",charset)<br />
&nbsp;&nbsp;&nbsp; @reverse_conv=Iconv.new(charset,"UTF-16")<br />
&nbsp;&nbsp;&nbsp; p_start=start.class==Fixnum&amp;&amp;start&gt;=0<br />
&nbsp;&nbsp;&nbsp; p_length=length.class==Fixnum&amp;&amp;length&gt;=0<br />
&nbsp;&nbsp;&nbsp; return "" unless src&amp;&amp;p_start&amp;&amp;p_length<br />
&nbsp;&nbsp;&nbsp; src_utf16=@conv.iconv(src)<br />
&nbsp;&nbsp;&nbsp; cutted_src_utf_16=src_utf16[2*start+2,2*length]<br />
&nbsp;&nbsp;&nbsp; @reverse_conv.iconv(cutted_src_utf_16)<br />
&nbsp; end</font><br />
<br />
view中使用：<br />
<br />
<font color="#33ccff">&lt;%<br />
&nbsp;&nbsp;&nbsp; a = '测a 试中文'<br />
&nbsp;&nbsp;&nbsp; puts cut_string('UTF-8',a,0,4) # 测a 试<br />
%&gt;</font><br />
<br />
ref:<br />
http://my.opera.com/sawpad/blog/show.dml/235183<br />
http://www.javaeye.com/topic/201531<br />
<br />
补充：<br />
真伤心，之前截取字符串，用上面的方法，还需要自己封装，自己转码解决，没想到rails已经把我们封装好了。。就是 truncate 方法。。看了下源码真简单，只需要输出对应字符串的chars 就解决了，源码：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; def truncate(text, length = 30, truncate_string = "...")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if text<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; l = length - truncate_string.chars.length<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; chars = text.chars<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (chars.length &gt; length ? chars[0...l] + truncate_string : text).to_s<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br />
<br />
使用demo：<br />
<br />
&lt;%<br />
a = 'test'<br />
b = '测试中文'<br />
<br />
p truncate(a,2,'...') # "tes..."<br />
p truncate(b,2,'...') # "测试中..."<br />
<br />
%&gt;<br />
<br />
<br />
如果需要得到汉字的长度 可以使用 jcode 库 里的 jlength<br />
<br />
demo:<br />
<br />
s = "测试140字测试140字测试140字测试140字测试140字测试140字测试140字测试140字测试140字测试140字测试140字测试140字测试140字测试<br />
&nbsp;&nbsp;&nbsp; 140字测试140字测试140字测试140字测试140字测试140字测试140字测试140字测试140字测试1"<br />
<br />
$KCODE='utf8'<br />
<br />
require 'jcode'<br />
<br />
p s.jsize<br />
<br />
p s.jlength<br />
<br />
ref:<br />
http://blog.guoshuang.com/?p=4769<br />
http://lifegoo.pluskid.org/?p=257<br />
<div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=5716af9f-806e-8b9f-bdc2-771230498c1b" /></div>
<img src ="http://www.blogjava.net/fl1429/aggbug/292371.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-08-24 14:23 <a href="http://www.blogjava.net/fl1429/archive/2009/08/24/292371.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Rails override helper method</title><link>http://www.blogjava.net/fl1429/archive/2009/08/18/291678.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Tue, 18 Aug 2009 09:48:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/08/18/291678.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/291678.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/08/18/291678.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/291678.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/291678.html</trackback:ping><description><![CDATA[ruby 1.8.7 + rails 2.1.0<br />
<br />
在用到rails &lt;%= time_ago_in_words(activity.created_at).capitalize %&gt; 之前 方法时 ， 输出的结果默认是英文的。。如下<br />
<img style="max-width: 800px;" src="http://www.blogjava.net/images/blogjava_net/fl1429/snapshot19.png"  alt="" /><br />
需要重写原来的方法，用的是rails2.1.0 如果是rails 2.2.2之后的，貌似可以使用I18N的。。所以只好重写method了<br />
刚开始是放在lib下， 然后在enviroment.rb中require的，但是后来没有成功，只好放在initializers中了<br />
<br />
新建 date_helper.rb:(可以随便命名)<br />
<br />
<font color="#33ccff">module ActionView<br />
&nbsp; module Helpers<br />
&nbsp;&nbsp;&nbsp; module DateHelper<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; def distance_of_time_in_words(from_time, to_time = 0, include_seconds = false)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from_time = from_time.to_time if from_time.respond_to?(:to_time)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; to_time = to_time.to_time if to_time.respond_to?(:to_time)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; distance_in_minutes = (((to_time - from_time).abs)/60).round<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; distance_in_seconds = ((to_time - from_time).abs).round<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case distance_in_minutes<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; when 0..1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return (distance_in_minutes == 0) ? '少于1分钟' : '1 分钟' unless include_seconds<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case distance_in_seconds<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; when 0..4&nbsp;&nbsp; then '少于 5 秒'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; when 5..9&nbsp;&nbsp; then '少于 10 秒'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; when 10..19 then '少于 20 秒'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; when 20..39 then '半分钟'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; when 40..59 then '少于 1 分钟'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '1 分钟'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; when 2..44&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; then "#{distance_in_minutes} 分钟"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; when 45..89&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; then '大概 1 小时'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; when 90..1439&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; then "大概 #{(distance_in_minutes.to_f / 60.0).round} 小时"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; when 1440..2879&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; then '1 天'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; when 2880..43199&nbsp;&nbsp;&nbsp;&nbsp; then "#{(distance_in_minutes / 1440).round} 天"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; when 43200..86399&nbsp;&nbsp;&nbsp; then '大概 1 个月'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; when 86400..525599&nbsp;&nbsp; then "#{(distance_in_minutes / 43200).round} 个月"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; when 525600..1051199 then '大概 1 年'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "超过 #{(distance_in_minutes / 525600).round} 年"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br />
&nbsp;&nbsp;&nbsp; end<br />
&nbsp; end<br />
end&nbsp;&nbsp;&nbsp; </font><br />
<br />
原来的方法，可以到<br />
/usr/lib/ruby/gems/1.8/gems/actionpack-2.1.0/lib/action_view/helpers/date_helper.rb 中找到<br />
<br />
之后重启服务，okay了。。。。。。<br />
<br />
ref：<br />
http://www.nabble.com/Rails-2.1-and-ddatetime_select-td17726324.html<br />
http://hervalicio.us/blog/2007/05/10/translating-time_ago_in_words/#comment-16360<br />
http://fsjoy.blog.51cto.com/318484/119541<br />
<br />
<div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=c973b2b9-946f-8ad6-a0ed-57c59cc11e4d" /></div>
<img src ="http://www.blogjava.net/fl1429/aggbug/291678.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-08-18 17:48 <a href="http://www.blogjava.net/fl1429/archive/2009/08/18/291678.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Rails 解析rss</title><link>http://www.blogjava.net/fl1429/archive/2009/08/18/291610.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Tue, 18 Aug 2009 02:45:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/08/18/291610.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/291610.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/08/18/291610.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/291610.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/291610.html</trackback:ping><description><![CDATA[ruby 1.8.7 + rails 2.1.0<br />
<br />
打开 http://www.google.cn/finance?q=600001 这个网址 可以看到 谷歌财经的 右侧 有个新闻区。。。这个新闻区就是从别的地方抓取来的<br />
截图：<br />
<img style="max-width: 800px;" src="http://www.blogjava.net/images/blogjava_net/fl1429/snapshot17.png"  alt="" /><br />
<br />
现在我们也来仿照它来实现一个，首先rails解析rss有两种方式，一种是用封装好的类库，一种是用原始的解析xml的方式,或者利用别人封装好的库 例如feedtools, rubyrss 等<br />
用类库的方法：<br />
<font color="#3366ff">&nbsp;&nbsp;&nbsp; require 'rss/2.0'<br />
&nbsp;&nbsp;&nbsp; require 'open-uri'<br />
&nbsp;&nbsp;&nbsp; url = "http://news.google.cn/news?pz=1&amp;ned=ccn&amp;hl=zh-CN&amp;topic=b&amp;output=rss"<br />
&nbsp;&nbsp;&nbsp; @feed = RSS::Parser.parse(open(url).read, false)<br />
&nbsp;&nbsp;&nbsp; @feed.items.each do |item| <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; puts item.title<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; puts item.link<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; puts&nbsp; item.description<br />
&nbsp;&nbsp;&nbsp; end</font><br />
<br />
解析xml的方法：<br />
在lib下建立一个RssParser的类，这样在任何地方都可以调用<br />
<font color="#3366ff">class RssParser<br />
&nbsp; require 'rexml/document'<br />
&nbsp; def self.run(url)<br />
&nbsp;&nbsp;&nbsp; xml = REXML::Document.new Net::HTTP.get(URI.parse(url))<br />
&nbsp;&nbsp;&nbsp; data = {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :title&nbsp;&nbsp;&nbsp; =&gt; xml.root.elements['channel/title'].text,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :home_url =&gt; xml.root.elements['channel/link'].text,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :rss_url&nbsp; =&gt; url,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :items&nbsp;&nbsp;&nbsp; =&gt; []<br />
&nbsp;&nbsp;&nbsp; }<br />
&nbsp;&nbsp;&nbsp; xml.elements.each '//item' do |item|<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new_items = {} and item.elements.each do |e|<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new_items[e.name.gsub(/^dc:(\w)/,"\1").to_sym] = e.text<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; data[:items] &lt;&lt; new_items<br />
&nbsp;&nbsp;&nbsp; end<br />
&nbsp;&nbsp;&nbsp; data<br />
&nbsp; end<br />
end</font><br />
<br />
action中使用：<br />
&nbsp; <font color="#3366ff">def test<br />
&nbsp;&nbsp;&nbsp; feed = RssParser.run("http://news.google.cn/news?pz=1&amp;ned=ccn&amp;hl=zh-CN&amp;topic=b&amp;output=rss")<br />
&nbsp;&nbsp;&nbsp; feed1 = feed[:items][0]<br />
&nbsp;&nbsp;&nbsp; feed2 = feed[:items][0]<br />
&nbsp;&nbsp;&nbsp; feed3 = feed[:items][0]<br />
&nbsp;&nbsp;&nbsp; # combine the feeds into an array<br />
&nbsp;&nbsp;&nbsp; @feeds = [feed1, feed2, feed3]<br />
&nbsp;&nbsp;&nbsp; # parse the pubDate strings into a DateTime object<br />
&nbsp;&nbsp;&nbsp; @feeds.each {|x| x[:pubDate] = DateTime.parse(x[:pubDate].to_s)}<br />
&nbsp;&nbsp;&nbsp; # iterate through each feed, sorting by pubDate<br />
&nbsp;&nbsp;&nbsp; @feeds.sort! {|a,b| a[:pubDate] &lt;=&gt; b[:pubDate]}<br />
&nbsp;&nbsp;&nbsp; # reverse the array to sort by descending pubDate<br />
&nbsp;&nbsp;&nbsp; @feeds.reverse!<br />
&nbsp;&nbsp;&nbsp; @feeds.each do |feed|<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; puts feed[:title]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; puts feed[:link]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; puts feed[:pubDate]<br />
&nbsp;&nbsp;&nbsp; end<br />
&nbsp; end</font><br />
<br />
那么上面的title link description 是从哪里来的呢。。。这个是rss2.0的xml结构，一般情况下是这样的：<br />
<pre>&lt;?xml version="1.0" encoding="utf-8"?&gt;<br />
&lt;rss version="2.0"&gt;<br />
&lt;channel&gt;<br />
&nbsp;        &lt;title&gt;Example Feed&lt;/title&gt;<br />
&lt;description&gt;Insert witty or insightful remark here&lt;/description&gt;<br />
&lt;link&gt;http://example.org/&lt;/link&gt;<br />
&lt;lastBuildDate&gt;Sat, 13 Dec 2003 18:30:02 GMT&lt;/lastBuildDate&gt;<br />
&lt;managingEditor&gt;johndoe@example.com (John Doe)&lt;/managingEditor&gt;<br />
&lt;item&gt;<br />
&lt;title&gt;Atom-Powered Robots Run Amok&lt;/title&gt;<br />
&lt;link&gt;http://example.org/2003/12/13/atom03&lt;/link&gt;<br />
&lt;guid isPermaLink="false"&gt;urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a&lt;/guid&gt;<br />
&lt;pubDate&gt;Sat, 13 Dec 2003 18:30:02 GMT&lt;/pubDate&gt;<br />
&lt;description&gt;Some text.&lt;/description&gt;<br />
&lt;/item&gt;<br />
&lt;/channel&gt;<br />
&lt;/rss&gt;<br />
<br />
或者你可以查看rss的页面源代码，或者puts下&nbsp; @feed = RSS::Parser.parse(open(url).read, false)的结果都可以看到上面的这中xml文档结构<br />
<br />
好，下面我们开始实现上面图的新闻：<br />
我们可以把这个部分放在partial里，所以只需要helper和partial文件<br />
helper：<br />
def feed_collection(param)<br />
require 'rss/2.0'<br />
require 'open-uri'<br />
# from news.google.cn<br />
urlhot = "http://news.google.cn/news?pz=1&amp;ned=ccn&amp;hl=zh-CN&amp;topic=b&amp;output=rss"<br />
urlfinance = "http://news.google.cn/news?pz=1&amp;ned=ccn&amp;hl=zh-CN&amp;topic=ecn&amp;output=rss"<br />
urlfund = "http://news.google.cn/news?pz=1&amp;ned=ccn&amp;hl=zh-CN&amp;topic=stc&amp;output=rss"<br />
urlfinancing = "http://news.google.cn/news?pz=1&amp;ned=ccn&amp;hl=zh-CN&amp;topic=pf&amp;output=rss"<br />
case param<br />
when 'hot'<br />
RSS::Parser.parse(open(urlhot).read, false)<br />
when 'finance'<br />
RSS::Parser.parse(open(urlfinance).read, false)<br />
when 'fund'<br />
RSS::Parser.parse(open(urlfund).read, false)<br />
when 'financing'<br />
RSS::Parser.parse(open(urlfinancing).read, false)<br />
end   <br />
end<br />
<br />
def feed_link(param)<br />
require 'cgi'<br />
CGI.unescape(param.slice(/(http%).*(&amp;)/)).gsub(/&amp;/,'')  if param # 把十六进制路径 例如http%3A2F之类的转化为 字符<br />
end<br />
<br />
def feed_title(param)<br />
param.slice(/.*(-)/).gsub(/-/,"") if param #截取需要的title<br />
end<br />
<br />
def feed_from(param)<br />
param.slice(/( - ).*/).from(2) if param # 截取需要的部分<br />
end<br />
<br />
<br />
partial: _feednews.erb.html<br />
&lt;div class="slides"&gt;        <br />
&lt;div&gt;&lt;%= render :partial =&gt; 'shared/feednews_item',:collection =&gt; feed_collection("hot").items %&gt;&lt;/div&gt;<br />
&lt;div&gt;&lt;%= render :partial =&gt; 'shared/feednews_item',:collection =&gt; feed_collection('finance').items %&gt;&lt;/div&gt;<br />
&lt;div&gt;&lt;%= render :partial =&gt; 'shared/feednews_item',:collection =&gt; feed_collection('fund').items %&gt;&lt;/div&gt;<br />
&lt;div&gt;&lt;%= render :partial =&gt; 'shared/feednews_item',:collection =&gt; feed_collection('financing').items %&gt;&lt;/div&gt;<br />
&lt;/div&gt;<br />
<br />
主义这里参考了 jquery的loopslider 插件（幻灯片） 加载显示的只是第一个div部分，可以参考：<br />
http://github.com/nathansearles/loopedSlider/tree/master<br />
<br />
partial: _feednews_item.html.erb<br />
&lt;ul&gt;<br />
&lt;% unless feednews_item.nil? %&gt;<br />
&lt;li  class="news"&gt;&lt;a  href="&lt;%= feed_link(feednews_item.link) %&gt;" target="_blank"&gt;&lt;%=  feed_title(feednews_item.title) %&gt;&lt;/a&gt;<br />
<br />
&lt;span class="grey small"&gt;&lt;span&gt; &lt;%= feed_from(feednews_item.title) %&gt;&lt;/span&gt;&amp;nbsp;&amp;mdash;&amp;nbsp;&lt;span&gt;&lt;%= feednews_item.pubDate.to_date %&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;<br />
&lt;% end %&gt;<br />
&lt;/ul&gt;<br />
<br />
</pre>
okay....已经成功了，我实现的截图：<br />
<img style="max-width: 800px;" src="http://www.blogjava.net/images/blogjava_net/fl1429/snapshot18.png"  alt="" /><br />
<br />
ref:<br />
http://www.rubycentral.com/book/ref_c_string.html<br />
http://www.javaeye.com/topic/60620<br />
http://www.troubleshooters.com/codecorn/ruby/basictutorial.htm#_Regular_Expressions<br />
http://paranimage.com/15-jquery-slideshow-plugins/#respond<br />
http://hi.baidu.com/todayz/blog/item/83c1b219d966fd4142a9ad5f.html<br />
http://dennis-zane.javaeye.com/blog/57538<br />
http://sporkmonger.com/projects/feedtools/<br />
http://rubyrss.com/<br />
http://rubyrss.com/<br />
http://www.superwick.com/archives/2007/06/09/rss-feed-parsing-in-ruby-on-rails/<br />
http://www.ruby-forum.com/topic/144447<br />
<br />
<br />
<div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=28fa3108-8c56-8ebe-8cbd-d594d9c5873b" /></div>
<img src ="http://www.blogjava.net/fl1429/aggbug/291610.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-08-18 10:45 <a href="http://www.blogjava.net/fl1429/archive/2009/08/18/291610.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Rails render partial collection</title><link>http://www.blogjava.net/fl1429/archive/2009/08/17/291533.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Mon, 17 Aug 2009 10:21:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/08/17/291533.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/291533.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/08/17/291533.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/291533.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/291533.html</trackback:ping><description><![CDATA[ruby 1.8.7 + rails 2.1.0<br />
<br />
Rails 在 partial 中 传递 collection，默认的循环变量 是 partial的名字（约定）。或者你想改变变量名的话，可以使用 :as 参数声明一个变量。。。不能用惯性思想 for ...........in........等<br />
<br />
例如：<br />
之前错误的写法：<br />
partial : _feednews.html.erb<br />
&nbsp;&lt;%= render :partial =&gt; 'shared/feednews_item',:collection =&gt; @feeds = feed_collection("hot").items %&gt;<br />
<br />
partial : _feednews_item.html.erb<br />
&nbsp; &lt;ul&gt;<br />
&lt;% for feed in @feeds.items %&gt;<br />
&nbsp; &lt;li&nbsp; class="news"&gt;&lt;a&nbsp; href="&lt;%= feed_link(feed.link) %&gt;" target="_blank"&gt;&lt;%=&nbsp; feed_title(feed.title) %&gt;&lt;/a&gt;&lt;br /&gt;<br />
&nbsp; &lt;span class="grey small"&gt;&lt;span&gt; &lt;%= feed_from(feed.title) %&gt;&lt;/span&gt;&amp;nbsp;&amp;mdash;&amp;nbsp;&lt;span&gt;&lt;%= feed.pubDate.to_date %&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;<br />
&lt;% end %&gt;<br />
&nbsp;&lt;/ul&gt;<br />
<br />
上面第二个 partial 显示的结果 for 循环 输出 后的 加上 rails 约定的partial collection 循环输出了。。结果重复。。做的过程中还遇到 partial collection empty 这个异常<br />
<br />
原因是  feed_collection("hot").items&nbsp; 返回的结果不是一个 collection..<br />
<br />
正确的写法：<br />
partial : _feednews.html.erb<br />
&nbsp;&lt;div&gt;&lt;%= render :partial =&gt; 'shared/feednews_item',:collection =&gt; feed_collection("hot").items %&gt;&lt;/div&gt;<br />
<br />
partial : _feednews_item.html.erb<br />
&lt;ul&gt;<br />
&nbsp; &lt;% unless feednews_item.nil? %&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;li&nbsp; class="news"&gt;&lt;a&nbsp; href="&lt;%= feed_link(feednews_item.link) %&gt;" target="_blank"&gt;&lt;%=&nbsp; feed_title(feednews_item.title) %&gt;&lt;/a&gt;&lt;br /&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;span class="grey small"&gt;&lt;span&gt; &lt;%= feed_from(feednews_item.title) %&gt;&lt;/span&gt;&amp;nbsp;&amp;mdash;&amp;nbsp;&lt;span&gt;&lt;%= feednews_item.pubDate.to_date %&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;<br />
&nbsp; &lt;% end %&gt;<br />
&lt;/ul&gt;<br />
<br />
从上面的prtial中可以看出 变量 是feednews_item 也就是partial的名字<br />
&nbsp;<br />
<br />
总结，一句话，如果 你在 partial 中 传了 collection ,那么 就用 partial的名字 作变量输出， 不需要 迭代， 如果 没有 传collection ， 那么 就需要 迭代输出！<br />
<br />
<br />
<br />
<br />
<div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=8bba6fea-5a1d-8bf8-8853-8a5900543b6d" /></div>
<img src ="http://www.blogjava.net/fl1429/aggbug/291533.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-08-17 18:21 <a href="http://www.blogjava.net/fl1429/archive/2009/08/17/291533.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Rails 多态关联（:polymorphic =&gt; true）</title><link>http://www.blogjava.net/fl1429/archive/2009/08/12/290864.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Wed, 12 Aug 2009 09:06:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/08/12/290864.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/290864.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/08/12/290864.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/290864.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/290864.html</trackback:ping><description><![CDATA[多态关联 也叫虚拟关联， 其实 表是不存在的。。。不像 :through =&gt; ：connections 那connections的表是存在的，也可以不存在的，connections是一个关联模型<br />
<br />
有这样一个需求，需要用到 虚拟关联<br />
<br />
在SNS中，例如xiaonei，douban等等都有 最近好友更新的内容显示，那么这个 一般是在一个 表中，例如 叫activities 表，更新有很多种 ，例如 修改头像，发表日志，建立了好友关系，发表评论等等，。。说白了就是 一个表 关联了 多个表，那就得用到 虚拟 关联了。。<br />
<br />
表结构：<br />
<img style="max-width: 800px;" src="http://www.blogjava.net/images/blogjava_net/fl1429/snapshot16.png" alt="" /><br />
<br />
原理：<br />
上面有三个表，activities表（记录更新了那些操作，最重要的两个字段是item_id,和item_type,item_id是对应到关联表的主键id，item_type是对应到关联表的表对象名例如comments表就是Comment） Posts表 （用户发表文字的表，例如有发表blog的blog_id,发表论坛 topic的 topic_id,给用户留言的client_info_id,body是发表的内容），<br />
comments表（评论表，body是评论内容，当然评论也好好多种评论，这个表里也需要关联许多表，从comments表的字段中也可以看到用了虚拟关联）<br />
<br />
用法：<br />
model:<br />
<br />
activity<br />
class Activity &lt; ActiveRecord::Base<br />
&nbsp; ................<br />
&nbsp; belongs_to :item, :polymorphic =&gt; true<br />
..........................<br />
end<br />
<br />
Comment<br />
..................<br />
has_many :activities, :foreign_key =&gt; "item_id" , :dependent =&gt; :destroy<br />
..................<br />
<br />
加上 :dependent =&gt; :destroy 是当这条评论删除时，activities 表里的记录同时被删除<br />
<br />
<br />
或者：<br />
<br />
has_many :activities, :as =&gt; :item , :dependent =&gt; :destroy <br />
<br />
<br />
那么 Post 模型 同理可得。。。。 <br />
<br />
因为上面的 :item ， 所以 activities 表里的 item_id ，&nbsp; item_type 是约定俗成的。。。。。。。。。<br />
<br />
取数据<br />
&nbsp;activity.item.body<br />
activity 是activities表中的记录对象<br />
<br />
ref：<br />
http://guides.rails.info/association_basics.html<br />
http://hideto.javaeye.com/blog/76709<br />
http://hi.baidu.com/rainchen/blog/item/fc3a94eeb31ad62b2df53412.html<br />
http://iceskysl.1sters.com/?action=show&amp;id=25<br />
http://rubycnrails.cn/articles/23 （了解:dependent=&gt;:destroy）<br />
<br />
<br />
<div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=ddadb8c0-22bc-87aa-9319-f80b657781cf" /></div>
<img src ="http://www.blogjava.net/fl1429/aggbug/290864.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-08-12 17:06 <a href="http://www.blogjava.net/fl1429/archive/2009/08/12/290864.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>rails link_to_remote delete record</title><link>http://www.blogjava.net/fl1429/archive/2009/08/11/290689.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Tue, 11 Aug 2009 09:14:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/08/11/290689.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/290689.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/08/11/290689.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/290689.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/290689.html</trackback:ping><description><![CDATA[link_to_remote 是ajax方法的destroy方法，主要是view里的id要是不同的值 和 controller 中的page.remove 方法<br />使用方法：<br /><br />view:<br />&lt;div&nbsp;&nbsp; id="activity_&lt;%=activity.id%&gt;" class="blog_item clearfix"&gt;<br />..........<br />&nbsp; &lt;%= link_to_remote image_tag("/images/icons/network/close.gif"),<br />&nbsp;&nbsp;&nbsp; :url&nbsp; =&gt; {:controller=&gt;'activities', :action =&gt;'destroy',:id=&gt;activity.id },<br />&nbsp;&nbsp;&nbsp; :method =&gt; :delete,<br />&nbsp;&nbsp;&nbsp; :confirm =&gt; %(确认删除更新?)<br />&nbsp; %&gt;<br />&lt;/div&gt;<br /><br />controller:<br /><br />&nbsp;def destroy <br />&nbsp;&nbsp;&nbsp; @activity.destroy<br />&nbsp; #&nbsp; flash[:notice] = "状态已删除"<br />&nbsp;&nbsp;&nbsp; respond_to do |format|<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format.html { redirect_to :back }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format.xml&nbsp; { head :ok }<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; format.js do<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; render :update do |page|<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; page.remove "activity_#{@activity.id}"<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end<br />&nbsp;&nbsp;&nbsp; end<br />&nbsp; end<br /><br />ref：<br />http://scottmotte.com/archives/62.html<br /><br /><div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=e7d19981-0333-86b0-bb06-2ced2617c42f" /></div><img src ="http://www.blogjava.net/fl1429/aggbug/290689.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-08-11 17:14 <a href="http://www.blogjava.net/fl1429/archive/2009/08/11/290689.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>rails pagination like twitter more button</title><link>http://www.blogjava.net/fl1429/archive/2009/08/10/290573.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Mon, 10 Aug 2009 09:29:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/08/10/290573.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/290573.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/08/10/290573.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/290573.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/290573.html</trackback:ping><description><![CDATA[环境 ： ruby 1.8.7 + rails 2.1.0 + prototype<br />
<br />
我们知道rails中分页一般是will_paginate插件 ， 如果想实现twitter那样的more的方式，那就得用到will_paginate插件 和 ajax的操作了，核心思想是在div id 的bottom处 insert_html , 比原来的直接 will_paginate 稍微复杂一点，网上有很多是像greader那样的滚屏自动加载的方法 google一下 endless pagination 就有很多<br />
<br />
<br />
<br />
效果：<br />
<img style="max-width: 800px;" src="http://www.blogjava.net/images/blogjava_net/fl1429/snapshot14.png" alt="" /><br />
<br />
源码下载：<br />
http://www.uushare.com/user/fl1429/file/1882575<br />
<br />
下载后使用方法：<br />
1，配置连接mysql数据库的yml，并在数据库中建立相信的db<br />
2，进入工程 rake db:migrate<br />
3,在数据库中添加一些数据<br />
4，okay 启动测试<br />
<br />
另附滚屏加载的代码下载，配置使用方法 和 上面类似<br />
http://www.uushare.com/user/fl1429/file/1882506<br />
<br />
ref:<br />
http://net.tutsplus.com/tutorials/javascript-ajax/create-a-twitter-like-load-more-widget/<br />
http://d.hatena.ne.jp/hichiriki/20090415/1239751466<br />
http://github.com/jney/jquery.pageless/blob/90213b1168ef23718e7dd8989e593f7e3a2d5c6d/README.textile<br />
http://www.railsillustrated.com/screencast-endless-page.html<br />
<br />
<br />
<br />
<br />
<div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=abbb2daf-650f-8cbd-8ef5-2e9cfc36aaab" /></div>
<img src ="http://www.blogjava.net/fl1429/aggbug/290573.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-08-10 17:29 <a href="http://www.blogjava.net/fl1429/archive/2009/08/10/290573.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>rails 没网络 查看api</title><link>http://www.blogjava.net/fl1429/archive/2009/08/06/290061.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Thu, 06 Aug 2009 03:01:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/08/06/290061.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/290061.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/08/06/290061.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/290061.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/290061.html</trackback:ping><description><![CDATA[terminal 输入gem server 开启服务<br /><br />localhost:8808 浏览。。。。<br /><br />唯一的好处是可以查看电脑里安装所有的gem rdoc<br /><br /><div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=0762ca54-0c27-8383-90cb-7b8c5930e9bd" /></div><img src ="http://www.blogjava.net/fl1429/aggbug/290061.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-08-06 11:01 <a href="http://www.blogjava.net/fl1429/archive/2009/08/06/290061.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ruby merge a hash</title><link>http://www.blogjava.net/fl1429/archive/2009/07/28/288761.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Tue, 28 Jul 2009 08:11:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/07/28/288761.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/288761.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/07/28/288761.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/288761.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/288761.html</trackback:ping><description><![CDATA[<span class="hilite1">ruby</span>能够使用<span class="hilite2">merge</span>（别名update）方法，来合并两个hash，如果他们中的健有相同的话，一个将会被删除<br /><br />demo:<br />delaware = { 1 =&gt; "Two", 2 =&gt; "New Value", 3 =&gt; "New Three" , 8 =&gt; "Five" }<br /><br />myhash = { 1 =&gt; "One", 2 =&gt; "Two", 3 =&gt; "Three", 4 =&gt; "Four", 5 =&gt; "Five" }<br /><br />puts delaware<br /><br />puts myhash<br /><br />puts delaware.merge(myhash)<br /><br />puts myhash.merge(delaware)<br /><br />结果：<br />1Two2New Value8Five3New Three<br />5Five1One2Two3Three4Four<br />5Five1One2Two8Five3Three4Four<br />5Five1Two2New Value8Five3New Three4Four<br /><br />ref：<br />http://ruby-doc.org/core/classes/Hash.html#M002880<br />http://www.java2s.com/Code/Ruby/Hash/Mergetwohashes.htm<br />http://simohayha.javaeye.com/blog/151947<br /><br /><br /><br /><br /><br /><div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=e3c1e0ff-6a79-880b-84af-3831869592ab" /></div><img src ="http://www.blogjava.net/fl1429/aggbug/288761.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-07-28 16:11 <a href="http://www.blogjava.net/fl1429/archive/2009/07/28/288761.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>windows xp install RMagick</title><link>http://www.blogjava.net/fl1429/archive/2009/07/27/288521.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Mon, 27 Jul 2009 02:32:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/07/27/288521.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/288521.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/07/27/288521.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/288521.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/288521.html</trackback:ping><description><![CDATA[<p>环境: ruby 1.8.6 + rails 2.1.0</p>
<p>下载地址:</p>
<p><a title="http://d.namipan.com/d/RMagick-2.9.0-ImageMagick-6.4.8-6-Q8.zip/5fda50e95ba401260eedddbaec51eef10a1908a098766901" href="http://d.namipan.com/d/RMagick-2.9.0-ImageMagick-6.4.8-6-Q8.zip/5fda50e95ba401260eedddbaec51eef10a1908a098766901">http://d.namipan.com/d/RMagick-2.9.0-ImageMagick-6.4.8-6-Q8.zip/5fda50e95ba401260eedddbaec51eef10a1908a098766901</a></p>
<p><a title="http://d.namipan.com/d/RMagick-2.9.0-ImageMagick-6.4.8-6-Q8.zip/5fda50e95ba401260eedddbaec51eef10a1908a098766901" href="http://d.namipan.com/d/RMagick-2.9.0-ImageMagick-6.4.8-6-Q8.zip/5fda50e95ba401260eedddbaec51eef10a1908a098766901">or</a></p>
<p><a title="http://www.dbank.com/download.action?k=8004b8cb15a44b28ab630551eb7658df/5fda50e95ba401260eedddbaec51eef10a1908a098766901" href="http://www.dbank.com/download.action?k=8004b8cb15a44b28ab630551eb7658df"><strong>http://www.dbank.com/download.action?k=8004b8cb15a44b28ab630551eb7658df</strong><br />
</a></p>
<p>or</p>
<p>http://www.uushare.com/filedownload?user=fl1429&amp;id=2018924<br />
</p>
<p>下载后,安装一个exe文件和一个gem文件</p>
<p>one : 点击exe安装</p>
<p>two:</p>
<p>gem install rmagick.gem</p>
<p>three:</p>
<p>不行的話重新起下電腦，嘿嘿～</p>
<p>ref:</p>
<p><a title="http://www.opensourceconnections.com/2007/10/06/installing-rmagick-on-windows-using-ruby-186/" href="http://www.opensourceconnections.com/2007/10/06/installing-rmagick-on-windows-using-ruby-186/">http://www.opensourceconnections.com/2007/10/06/installing-rmagick-on-windows-using-ruby-186/</a></p>
<img src ="http://www.blogjava.net/fl1429/aggbug/288521.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-07-27 10:32 <a href="http://www.blogjava.net/fl1429/archive/2009/07/27/288521.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>windows install ruby1.8.6+rails2.1.0</title><link>http://www.blogjava.net/fl1429/archive/2009/07/27/288512.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Mon, 27 Jul 2009 01:57:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/07/27/288512.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/288512.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/07/27/288512.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/288512.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/288512.html</trackback:ping><description><![CDATA[<p>one:</p> <p>从ruby-lang下载ruby1.8.6的installer,点击安装</p> <p>two:</p> <p>gem install rails -v=2.1.0</p> <p>判断成功:</p> <p>ruby –v</p> <p>gem –v</p> <p>rails -v</p><img src ="http://www.blogjava.net/fl1429/aggbug/288512.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-07-27 09:57 <a href="http://www.blogjava.net/fl1429/archive/2009/07/27/288512.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ruby is_a?</title><link>http://www.blogjava.net/fl1429/archive/2009/07/14/286665.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Tue, 14 Jul 2009 03:53:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/07/14/286665.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/286665.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/07/14/286665.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/286665.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/286665.html</trackback:ping><description><![CDATA[demo:<br /><br /><font color="#3333ff"><small>class A&nbsp; <br />end<br /><br />t = :name<br /><br />if t.is_a?(Symbol) # true<br />&nbsp; puts 't true'<br />end<br /><br />if A.is_a?(Symbol) # false<br />&nbsp; puts 'A true'<br />end<br /><br />if 12.is_a?(Integer) #true<br />&nbsp; puts '12'<br />end</small></font><br /><br />ref:<br />http://www.ruby-doc.org/core/classes/Symbol.html<br />http://www.ruby-doc.org/docs/Tutorial/part_01/objects.html<br /><br /><img src ="http://www.blogjava.net/fl1429/aggbug/286665.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-07-14 11:53 <a href="http://www.blogjava.net/fl1429/archive/2009/07/14/286665.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ruby uncompress css</title><link>http://www.blogjava.net/fl1429/archive/2009/06/30/284814.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Tue, 30 Jun 2009 10:27:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/06/30/284814.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/284814.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/06/30/284814.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/284814.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/284814.html</trackback:ping><description><![CDATA[在网上下载了css，经常是被压缩过的，急需要转化一下，如果你是用的linux，你可以用awk command line来解决：<br /><br /><font color="#3366ff">$                        cat somefile.css | awk '{gsub(/{|}|;/,"&amp;\n"); print}' &gt;&gt; uncompressed.css</font><br /><br />后来个人用ruby写了个转化的代码：<br /><br />输出到控制台：<br /><font color="#3333ff">path = '/home/feng/compress.css'<br />string = File.read(path)<br />puts string.gsub!(/;/,";\n").gsub!(/\}/,"\n}\n").gsub!(/\{/,"\n{\n")</font><br /><br />输出到文件：<br /><font color="#3333ff">path = '/home/feng/compress.css'<br />file = File.new(path, "r")<br />path1 = '/home/feng/uncompress.css'<br />File.open(path1, "wb") do&nbsp;&nbsp; |f|<br />&nbsp; f.write(file.readline().gsub!(/;/,";\n").gsub!(/\}/,"\n}\n").gsub!(/\{/,"\n{\n"))<br />end</font><br /><br />ref：<br />http://www.commandlinefu.com/commands/view/2339/uncompress-a-css-file<br /><div class="line" title="Click to select this command">        </div><br /><br /><img src ="http://www.blogjava.net/fl1429/aggbug/284814.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-06-30 18:27 <a href="http://www.blogjava.net/fl1429/archive/2009/06/30/284814.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ubuntu install ror</title><link>http://www.blogjava.net/fl1429/archive/2009/06/24/283989.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Wed, 24 Jun 2009 10:18:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/06/24/283989.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/283989.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/06/24/283989.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/283989.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/283989.html</trackback:ping><description><![CDATA[<style type="text/css"> 	<!-- 		@page { size: 8.5in 11in; margin: 0.79in } 		P { margin-bottom: 0.08in } 	--> 	</style>  <p style="margin-bottom: 0in;"><font face="DejaVu Sans">环境：</font>ubuntu 8.10 en version</p> <p style="margin-bottom: 0in;"><font face="DejaVu Sans">安装</font>ror<font face="DejaVu Sans">版本 ： </font>ruby 1.8.7 + rails 2.1.0</p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;">1,<font face="DejaVu Sans">安装</font>ruby</p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;">sudo apt-get ruby</p> <p style="margin-bottom: 0in;"><font face="DejaVu Sans">安装结束后 可以用</font>ruby -v <font face="DejaVu Sans">查看安装结果</font></p> <p style="margin-bottom: 0in;">feng@feng:~$ ruby -v</p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;">ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux]</p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;">2<font face="DejaVu Sans">，安装</font>rubygems</p> <p style="margin-bottom: 0in;">sudo apt-get rubygems</p> <p style="margin-bottom: 0in;"><font face="DejaVu Sans">安装结束后可以用 </font>gem -v <font face="DejaVu Sans">查看安装结果</font></p> <p style="margin-bottom: 0in;">feng@feng:~$ gem -v</p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;">1.3.4</p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;">3<font face="DejaVu Sans">，安装完</font>rubygems<font face="DejaVu Sans">后可能不是最新版，需要更新一下，更新的方法</font></p> <pre style="margin-bottom: 0.2in;">$ sudo gem install rubygems-update</pre><p style="margin-bottom: 0in;"> 4<font face="DejaVu Sans">，安装</font>rails  </p> <p style="margin-bottom: 0in;">sudo gem install -v=2.1.0 rails</p> <p style="margin-bottom: 0in;"><font face="DejaVu Sans">安装结束后，可以用 </font>rails -v <font face="DejaVu Sans">查看下安装结果</font></p> <p style="margin-bottom: 0in;">feng@feng:~$ rails -v</p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;">Rails 2.1.0</p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;"><font face="DejaVu Sans">刚开始我用的是</font>sudo gem install rails,<font face="DejaVu Sans">安装的是最新版，但是和</font>ruby1.8.7<font face="DejaVu Sans">不协调，最后又卸了</font>rails<font face="DejaVu Sans">，重新装了</font>rails 2.1.0<font face="DejaVu Sans">，卸载方式如下：</font></p> <p style="margin-bottom: 0in;">gem list  <font face="DejaVu Sans">列出所有</font>gem<font face="DejaVu Sans">包，</font></p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;">feng@feng:~$ gem list</p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;">*** LOCAL GEMS ***</p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;">actionmailer (2.1.0)</p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;">actionpack (2.1.0)</p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;">activerecord (2.1.0)</p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;">activeresource (2.1.0)</p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;">activesupport (2.1.0)</p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;">calendar_date_select (1.15)</p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;">rails (2.1.0)</p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;">rake (0.8.7)</p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;">rmagick (2.9.2)</p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;"><font face="DejaVu Sans">然后逐一删除</font></p> <p style="margin-bottom: 0in;">sudo gem uninstall rails</p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;">sudo gem uninstall actionmailer  </p> <p style="margin-bottom: 0in;"><font face="DejaVu Sans">。</font></p> <p style="margin-bottom: 0in;"><font face="DejaVu Sans">。</font></p> <p style="margin-bottom: 0in;"><font face="DejaVu Sans">。</font></p> <p style="margin-bottom: 0in;">ref<font face="DejaVu Sans">：</font></p> <p style="margin-bottom: 0in;"><font color="#000080"><u><a href="http://hi.baidu.com/pepsichan/blog/item/dc1e030a58c9021795ca6bde.html">http://hi.baidu.com/pepsichan/blog/item/dc1e030a58c9021795ca6bde.html</a></u></font></p> <p style="margin-bottom: 0in;"><br /></p> <p style="margin-bottom: 0in;"><font color="#000080"><u><a href="http://hi.baidu.com/pepsichan/blog/item/8cf53dec6957432f62d09f1c.html">http://hi.baidu.com/pepsichan/blog/item/8cf53dec6957432f62d09f1c.html</a></u></font></p> <p style="margin-bottom: 0in;"><br /></p> <br /><br /><img src ="http://www.blogjava.net/fl1429/aggbug/283989.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-06-24 18:18 <a href="http://www.blogjava.net/fl1429/archive/2009/06/24/283989.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>rmagick resize image</title><link>http://www.blogjava.net/fl1429/archive/2009/06/23/283797.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Tue, 23 Jun 2009 10:24:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/06/23/283797.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/283797.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/06/23/283797.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/283797.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/283797.html</trackback:ping><description><![CDATA[环境：ubuntu 8.1.0 ＋ ruby1.8.7 ＋ rails 2.1.0 ＋ rmagick 2.9.2<br />
最近在用ruby的rmagick库<br />
http://www.imagemagick.org/RMagick/doc/image3.html#resize_to_fit<br />
改变图片的大小，使用了resize, resize_to_fill,resize_to_fit 原来api提供的方法，可以就是不成功，一直提示 undefined method resize_to_fit等方法找不到,网上有n多人遇到，可以我折腾了一个上午还是没搞定，最后准备另辟蹊径的，但是在这里发现了方法，另外一个函数处理的：<br />
http://www.goodbyehelicopter.com/2007/07/25/rails-is-bailing-out-in-rmagick/#comment-1594<br />
那个里面的图片看起来很想无锡的 灵山大佛 <br />
原来的那个demo里 AspectGeometry用的是 ！ ，最后resize后的图片width:height总是4：3，不知道为什么，最后我把参数换成 <br />
<pre>Magick::AspectGeometry <br />
就ok了<br />
<br />
我的demo：<br />
<br />
</pre>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">#</span><span style="color: #008000;">&nbsp;RMagick&nbsp;Test</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">require&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">rubygems</span><span style="color: #800000;">'</span><span style="color: #000000;"><br />
require&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">RMagick</span><span style="color: #800000;">'</span><span style="color: #000000;"><br />
include&nbsp;Magick<br />
<br />
image_to_alter&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800000;">'</span><span style="color: #800000;">public/upload/52/1.jpg</span><span style="color: #800000;">'</span><span style="color: #000000;"><br />
img&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Image.read(image_to_alter)[0]<br />
thumbnail_height&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">100</span><span style="color: #000000;"><br />
thumbnail_width&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">100</span><span style="color: #000000;"><br />
geometry_obj&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;Geometry.new(thumbnail_width,&nbsp;thumbnail_height,&nbsp;nil,&nbsp;nil,&nbsp;Magick::AspectGeometry)<br />
chg_geom_img&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;img.change_geometry(geometry_obj)&nbsp;{</span><span style="color: #000000;">|</span><span style="color: #000000;">cols,&nbsp;rows,&nbsp;image</span><span style="color: #000000;">|</span><span style="color: #000000;">&nbsp;image.resize(cols,&nbsp;rows)}<br />
chg_geom_img.write(</span><span style="color: #800000;">"</span><span style="color: #800000;">public/upload/52/thumb1.jpg</span><span style="color: #800000;">"</span><span style="color: #000000;">)</span></div>
<pre><br />
<br />
api：<br />
http://www.simplesystems.org/RMagick/doc/struct.html#Geometry<br />
</pre>
<br />
<br />
<br />
<br />
<img src ="http://www.blogjava.net/fl1429/aggbug/283797.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-06-23 18:24 <a href="http://www.blogjava.net/fl1429/archive/2009/06/23/283797.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>rails 变相的预览图片</title><link>http://www.blogjava.net/fl1429/archive/2009/06/22/283629.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Mon, 22 Jun 2009 10:11:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/06/22/283629.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/283629.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/06/22/283629.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/283629.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/283629.html</trackback:ping><description><![CDATA[最近在做图片的上传，但是客户可以在上传之前对自己的图片进行剪切，本想让图片不上传到server上就可以剪切的，但是最后在firefox上遇到了麻烦，firefox中不可以得到input type＝file的全路径，只可以得到文件名，很让人郁闷。。。google了下，网上有好多人遇到了这个问题，说是firefox从安全考虑的，不管它了。。估计肯定有解决办法，找到了一个别人实现的。。但是预览功能都是用js输出的，我要用image 标签输出，改这个js也不简单：<br />
http://hedgerwow.appspot.com/image-upload-preview/demo.html<br />
我也就没有继续折腾，最后参照xiaonei的图片上传 剪切功能办法，实现了，其实就是先把图片上传到server上的。。。<br />
xiaonei 网址：http://head.upload.xiaonei.com/Upload.do<br />
没有xiaonei号的。。看我的一张截图吧。。其实也就是多了一个上传button罢了<br />
<br />
<img style="max-width: 800px;" src="http://www.blogjava.net/images/blogjava_net/fl1429/snapshot2.png"  alt="" /><br />
<br />
我的效果：<br />
<img style="max-width: 800px;" src="http://www.blogjava.net/images/blogjava_net/fl1429/snapshot3.png"  alt="" /><br />
核心代码：<br />
rhtml：<br />
<font color="#3333ff">&nbsp; &lt;form name="uploadform" id="uploadform" action="crop" method="post" enctype="multipart/form-data"&gt;<br />
&nbsp;&lt;input id="uploadimage" type="file" name="uploadimage"/&gt;<br />
&lt;input type="submit" class="button" name="upload" value="上传" id="upload" /&gt;<br />
&lt;/form&gt;</font><br />
<br />
controller:<br />
<font color="#3333ff">&nbsp;&nbsp;&nbsp; if params[:upload]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; image = params[:uploadimage]<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name = image.original_filename<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File.makedirs("public/upload/tmp")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; directory = "public/upload/tmp"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; path = File.join(directory,name)&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File.open(path, "wb") { |f| f.write(image.read) } # important<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @src = path[6..-1] # get image src<br />
&nbsp;&nbsp;&nbsp; end<br />
</font><br />
source download:<br />
http://www.uushare.com/user/fl1429/file/1842295&nbsp;&nbsp; (ruby1.8.6 + rails 2.1.0)<br />
<img src ="http://www.blogjava.net/fl1429/aggbug/283629.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-06-22 18:11 <a href="http://www.blogjava.net/fl1429/archive/2009/06/22/283629.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ruby delete all files from a diretory</title><link>http://www.blogjava.net/fl1429/archive/2009/06/22/283623.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Mon, 22 Jun 2009 09:48:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/06/22/283623.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/283623.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/06/22/283623.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/283623.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/283623.html</trackback:ping><description><![CDATA[demo:<br /><br /><font color="#000099">require 'fileutils'<br /><br />def delete(filename)<br />&nbsp; Dir["#{File.dirname(filename)}/*"].each do |file|<br />&nbsp;&nbsp;&nbsp; next if File.basename(file) == File.basename(filename)<br />&nbsp;&nbsp;&nbsp; FileUtils.rm_rf file<font color="#ff0000">,:noop =&gt; true, :verbose =&gt; true</font><br />&nbsp; end<br />end<br /><br />files = 'public/upload/48/*'<br />delete(files)</font><br /><br />注意如果需要成功运行的话，把红色部分去掉，红色部分表示 不执行，只是输出到控制台 <br /><br />ref：<br />http://groups.google.com/group/comp.lang.ruby/browse_thread/thread/7fe8d78ee4e464ee<br /><br /><img src ="http://www.blogjava.net/fl1429/aggbug/283623.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-06-22 17:48 <a href="http://www.blogjava.net/fl1429/archive/2009/06/22/283623.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>rails  file upload to filesystem</title><link>http://www.blogjava.net/fl1429/archive/2009/06/19/283283.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Fri, 19 Jun 2009 11:19:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/06/19/283283.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/283283.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/06/19/283283.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/283283.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/283283.html</trackback:ping><description><![CDATA[rails中把文件上传到文件夹中，一般有图片，rar文件等等，试着找了些rails file upload的plugins （fleximage，attachment_fu,paperclip.....），但是最后发现都不是太好用，最后利用原始ruby api实现了,实现步骤：<br /><br />rhtml：<br />&nbsp;&nbsp;&nbsp; &lt;form name="photo" enctype="multipart/form-data" action="/upload/path" method="post"&gt;<br />&nbsp;&nbsp;&nbsp; Photo &lt;input type="file" name="image"&nbsp; id="image" size="30"&nbsp; /&gt; <br />&nbsp;&nbsp;&nbsp; &lt;input type="submit" name="upload" value="Upload"&nbsp; class="button" /&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/form&gt;<br /><br />controller:<br />path = 'public/data'<br />File.open(path, "wb") { |f| f.write(params[:image].read) }<br /><br />that's all,简单吧。。注意在用File类的一些方法时,需要require 'ftools'<br /><br />ref:<br />http://www.tutorialspoint.com/ruby-on-rails-2.1/rails-file-uploading.htm<br /><br /><img src ="http://www.blogjava.net/fl1429/aggbug/283283.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-06-19 19:19 <a href="http://www.blogjava.net/fl1429/archive/2009/06/19/283283.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ruby crop an image by rmagick</title><link>http://www.blogjava.net/fl1429/archive/2009/06/19/283282.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Fri, 19 Jun 2009 11:09:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/06/19/283282.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/283282.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/06/19/283282.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/283282.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/283282.html</trackback:ping><description><![CDATA[环境：ubuntu + ruby1.8.7<br />前提是你ruby里要先装了rmagick类库，下面demo的四个100分别是x坐标，y坐标，width，height<br />图片处理更多的功能，一定要看rmagic的api<br />demo:test.rb<br /><br />&nbsp; require 'rubygems'<br />&nbsp; require 'RMagick'<br />&nbsp; include Magick<br />&nbsp;&nbsp;&nbsp; image=Image.read("/home/feng/Img/1.jpg").first<br />&nbsp;&nbsp;&nbsp; face=image.crop!(100,100,100,100)<br />&nbsp;&nbsp;&nbsp; face.write("/home/feng/Img/crop.jpg")<br /><br />ref:<br />http://www.genlinux.org/2009/03/ruby-program-to-crop-image-using.html<br /><br /><img src ="http://www.blogjava.net/fl1429/aggbug/283282.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-06-19 19:09 <a href="http://www.blogjava.net/fl1429/archive/2009/06/19/283282.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ruby random array element</title><link>http://www.blogjava.net/fl1429/archive/2009/06/19/283279.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Fri, 19 Jun 2009 11:00:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/06/19/283279.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/283279.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/06/19/283279.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/283279.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/283279.html</trackback:ping><description><![CDATA[<font color="#3333ff"><font color="#000000">demo:</font><br /><br />a = ['ruby','java','php','flex']<br /><br />for i in a<br />&nbsp; puts i<br />end<br /><br />puts a[rand(a.size)]</font><br /><br />ref:<br />http://nathanpowell.org/blog/archives/585<br /><br /><img src ="http://www.blogjava.net/fl1429/aggbug/283279.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-06-19 19:00 <a href="http://www.blogjava.net/fl1429/archive/2009/06/19/283279.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ruby get all files in a directory</title><link>http://www.blogjava.net/fl1429/archive/2009/06/19/283277.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Fri, 19 Jun 2009 10:56:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/06/19/283277.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/283277.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/06/19/283277.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/283277.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/283277.html</trackback:ping><description><![CDATA[得到一个目录下的所有文件:<br /><br /><font color="#3333ff">basedir = "public/upload/48"<br />contains = Dir.new(basedir).entries # return array<br />puts contains[1]</font><br /><br />ref:<br />http://www.wellho.net/resources/ex.php4?item=r106/afid.rb<br /><br /><img src ="http://www.blogjava.net/fl1429/aggbug/283277.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-06-19 18:56 <a href="http://www.blogjava.net/fl1429/archive/2009/06/19/283277.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Rails no such file to load -- rmagick (LoadError)</title><link>http://www.blogjava.net/fl1429/archive/2009/06/19/283180.html</link><dc:creator>fl1429</dc:creator><author>fl1429</author><pubDate>Fri, 19 Jun 2009 02:30:00 GMT</pubDate><guid>http://www.blogjava.net/fl1429/archive/2009/06/19/283180.html</guid><wfw:comment>http://www.blogjava.net/fl1429/comments/283180.html</wfw:comment><comments>http://www.blogjava.net/fl1429/archive/2009/06/19/283180.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/fl1429/comments/commentRss/283180.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/fl1429/services/trackbacks/283180.html</trackback:ping><description><![CDATA[我的rails中已经安装了rmagick， 可以利用gem list看一下，<br /><br />跑的源码：切割图片<br /><small><font color="#3333ff">require 'rubygems'<br />require 'RMagick'<br />include Magick<br />image=Image.read("/home/feng/Img/1.jpg").first<br />face=image.crop!(270,55,194,194)<br />face.write("/home/feng/Img/crop.jpg")</font></small><br /><br />但是还是报错<br /><font color="#3366ff"><small>no such file to load -- rmagick (LoadError)</small></font><br /><br />。。查了下，<br /><br />原来是在linux中 RMagick 必须严格遵照大小写，而在windows中区分的不是明显<br />ref：<br />http://yingxiong.javaeye.com/blog/314898<br /><br /><img src ="http://www.blogjava.net/fl1429/aggbug/283180.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/fl1429/" target="_blank">fl1429</a> 2009-06-19 10:30 <a href="http://www.blogjava.net/fl1429/archive/2009/06/19/283180.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>