锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国模叶桐国产精品一区,国产视频久久网,亚洲欧美日韩一区在线观看 http://www.shnenglu.com/cpunion/category/88.htmlAS/C/C++/D/Java/JS/Python/Ruby zh-cn Mon, 19 May 2008 12:34:08 GMT Mon, 19 May 2008 12:34:08 GMT 60 [RoR] Post/Get鍒嗘淳 http://www.shnenglu.com/cpunion/archive/2006/09/17/12571.htmlqiezi qiezi Sun, 17 Sep 2006 03:13:00 GMT http://www.shnenglu.com/cpunion/archive/2006/09/17/12571.html http://www.shnenglu.com/cpunion/comments/12571.html http://www.shnenglu.com/cpunion/archive/2006/09/17/12571.html#Feedback 1 http://www.shnenglu.com/cpunion/comments/commentRss/12571.html http://www.shnenglu.com/cpunion/services/trackbacks/12571.html 涓銆佸墠璦
鍑轟簬鏁版嵁瀹夊叏鎬ц冭檻錛屾煇浜涚牬鍧忔ч摼鎺ュ簲璇ヤ嬌鐢╬ost璇鋒眰錛屾瘮濡備竴涓垹闄よ褰曠殑璇鋒眰銆?br /> 闄や簡鑴氭湰紜浠ュ錛屾湇鍔$榪橀渶瑕乸ost楠岃瘉錛屽洜涓鴻剼鏈槸鍙互緇曡繃鐨勩傛兂鍍忎綘鐨勯〉闈笂鏈変竴涓垹闄ら摼鎺ワ紝鍙綔浜嗗鎴風鑴氭湰紜錛堣佺殑scaffold鐢熸垚浠g爜鏈夎繖闂錛夛紝琚玤oogle鎵懼埌浜嗭紝瀹冧竴涓姹傚氨浼氳浣犵殑鏁版嵁涓㈠け銆?br /> rails瀵逛簬榪欑被璇鋒眰鐨勫鐞嗭紝鏄氳繃verify鏂規硶錛岄粯璁ょ殑scaffold鐢熸垚浠g爜鏈夊涓嬪唴瀹癸細聽聽 # 聽GETs聽should聽be聽safe聽(see聽http://www.w3.org/2001/tag/doc/whenToUseGet.html) 聽聽verify聽 : method聽 => 聽 : post , 聽 : only聽 => 聽[聽 : destroy , 聽 : create , 聽 : update聽] , 聽聽聽聽聽聽聽聽聽: redirect_to聽 => 聽{聽 : action聽 => 聽 : list聽}
鍙湁post璇鋒眰鏃訛紝destroy鎵嶄細琚厑璁革紝濡傛灉鏄痝et錛屽氨浼氳閲嶅畾鍚戝埌list銆?br />浜屻佸疄鐜?/b> 鎴戣嚜宸卞疄鐜頒簡涓涓猰ethod_dispatch錛屽綋璇鋒眰涓涓?test/a鏃訛紝濡傛灉鏄痝et錛屽垯浼氱洿鎺ユ墽琛孴estController#a錛涘鏋滄槸post錛屽垯浼氭墽琛孴estController#a_post錛宎_post搴旇鏄痯rotected錛岃繖鏍蜂笉浼氱洿鎺ユ毚闇茬粰瀹㈡埛錛実et/post灝變弗鏍煎尯鍒嗗紑鏉ヤ簡銆?br /> method_dispatch鐜板湪鏄洿鎺ュ疄鐜板湪ApplicationController涓殑錛屼唬鐮佸涓嬶細 class聽ApplicationController聽 < 聽ActionController :: Base 聽聽protected 聽聽def聽self . method_dispatch( * methods) 聽聽聽聽before_filter聽 : do_method_dispatch , 聽 : only聽 => 聽methods . flatten . map ( &: to_sym) 聽聽end 聽聽private 聽聽def聽do_method_dispatch 聽聽聽聽 if 聽request . post ? 聽 && 聽respond_to ? ( " #{action_name}_post " ) 聽聽聽聽聽聽 eval ( " #{action_name}_post " ) 聽聽聽聽聽聽 return 聽false 聽聽聽聽end 聽聽end end
鐢變簬ApplicationController閲岄潰鐨勬柟娉曚細琚瓙綾葷戶鎵垮埌錛屾墍浠ュ繀欏諱弗鏍煎鐞嗚闂駭鍒?br /> 浣跨敤濡備笅錛?br />class聽TestController聽 < 聽ApplicationController 聽聽method_dispatch聽 : a 聽聽def聽 index 聽聽end 聽聽def聽a 聽聽聽聽render聽: text聽 => 聽 ' get聽a ' 聽聽end 聽聽def聽b 聽聽聽聽render聽: text聽 => 聽 ' get聽b ' 聽聽end 聽聽protected 聽聽def聽a_post 聽聽聽聽render聽: text聽 => 聽 ' post聽a ' 聽聽end 聽聽def聽b_post 聽聽聽聽render聽: text聽 => 聽 ' post聽b ' 聽聽end end
娉ㄦ剰a_post錛宐_post瑕佽淇濇姢璧鋒潵闃叉鐩存帴璋冪敤銆?br /> index.rhtml閲岄潰婕旂ず浜嗕嬌鐢╣et鍜宲ost鐨勬儏鍐碉細<%= 聽link_to聽 " Get聽a " , 聽 : action聽 => 聽 ' a ' 聽 %> <%= 聽link_to聽 " Post聽a " , 聽{ : action聽 => 聽 ' a ' } , 聽{ : post聽 => 聽true}聽 %>< br聽 /> <%= 聽link_to聽 " Get聽b " , 聽 : action聽 => 聽 ' b ' 聽 %> <%= 聽link_to聽 " Post聽b " , 聽{ : action聽 => 聽 ' b ' } , 聽{ : post聽 => 聽true}聽 %>< br聽 />
rails鍦ㄥ鐞嗘湁:post => true鍙傛暟鐨刲ink_to鏃訛紝鐢熸垚鐨勪唬鐮佸涓嬶細< a聽 href ="/test/a" 聽onclick ="var聽f聽=聽document.createElement('form'); 聽聽聽聽聽聽 this.parentNode.appendChild(f);聽f.method聽=聽'POST';聽f.action聽=聽this.href;聽f.submit();return聽false;" > Post聽a </ a >
緇忔祴璇曚笂闈唬鐮佸伐浣滄儏鍐佃壇濂斤紝浣跨敤get璁塊棶/test/a鏃訛紝鏄劇ずget a錛涗嬌鐢╬ost璁塊棶鏃訛紝鏄劇ずpost a銆備嬌鐢╣et璁塊棶/test/b鏃訛紝鏄劇ずget b錛涗嬌鐢╬ost鏃訛紝鏄劇ずget b錛屽洜涓篵騫舵病鏈変嬌鐢╩ethod_dispatch銆?br />涓夈佸簲鐢?/b> 涓嬮潰鐨刾osts_controller.rb鏄痵caffold鐢熸垚鐨勶細 class聽PostsController聽 < 聽ApplicationController 聽聽def聽 index 聽聽聽聽list 聽聽聽聽render聽: action聽 => 聽 ' list ' 聽聽end 聽聽# 聽GETs聽should聽be聽safe聽(see聽http://www.w3.org/2001/tag/doc/whenToUseGet.html) 聽聽verify聽 : method聽 => 聽 : post , 聽 : only聽 => 聽[聽 : destroy , 聽 : create , 聽 : update聽] , 聽聽聽聽聽聽聽聽聽: redirect_to聽 => 聽{聽 : action聽 => 聽 : list聽} 聽聽def聽list 聽聽聽聽 @post_pages , 聽 @posts 聽 = 聽paginate聽 : posts , 聽 : per_page聽 => 聽 10 聽聽end 聽聽def聽show 聽聽聽聽@post 聽 = 聽Post . find(params[ : id]) 聽聽end 聽聽def聽new 聽聽聽聽 @post 聽 = 聽Post . new 聽聽end 聽聽def聽create 聽聽聽聽 @post 聽 = 聽Post . new(params[ : post]) 聽聽聽聽 if 聽 @post . save 聽聽聽聽聽聽flash[ : notice]聽 = 聽 ' Post聽was聽successfully聽created. ' 聽聽聽聽聽聽redirect_to聽: action聽 => 聽 ' list ' 聽聽聽聽else 聽聽聽聽聽聽render聽: action聽 => 聽 ' new ' 聽聽聽聽end 聽聽end 聽聽def聽edit 聽聽聽聽@post 聽 = 聽Post . find(params[ : id]) 聽聽end 聽聽def聽update 聽聽聽聽 @post 聽 = 聽Post . find(params[ : id]) 聽聽聽聽 if 聽 @post . update_attributes(params[ : post]) 聽聽聽聽聽聽flash[ : notice]聽 = 聽 ' Post聽was聽successfully聽updated. ' 聽聽聽聽聽聽redirect_to聽: action聽 => 聽 ' show ' , 聽 : id聽 => 聽 @post 聽聽聽聽else 聽聽聽聽聽聽render聽: action聽 => 聽 ' edit ' 聽聽聽聽end 聽聽end 聽聽def聽destroy 聽聽聽聽Post. find(params[ : id]) . destroy 聽聽聽聽redirect_to聽 : action聽 => 聽 ' list ' 聽聽end end
鍙互鐪嬪埌錛屽畠娣誨姞浜唙erify錛屼絾action榪囧錛岄渶瑕佸湪verify涓淮鎶や竴浠藉搴旀柟娉曞悕錛岀◢涓嶇暀紲炲氨瀹規槗鍑虹幇婕忔礊銆?br /> 鎴戞妸瀹冧慨鏀瑰涓嬶細class聽PostsController聽 < 聽ApplicationController 聽聽method_dispatch聽 : new , 聽 : edit , 聽 : destroy 聽聽def聽 index 聽聽聽聽list 聽聽聽聽render聽: action聽 => 聽 ' list ' 聽聽end 聽聽def聽list 聽聽聽聽@post_pages , 聽 @posts 聽 = 聽paginate聽 : posts , 聽 : per_page聽 => 聽 10 聽聽end 聽聽def聽show 聽聽聽聽@post 聽 = 聽Post . find(params[ : id]) 聽聽end 聽聽def聽new 聽聽聽聽 @post 聽 = 聽Post . new 聽聽end 聽聽def聽edit 聽聽聽聽 @post 聽 = 聽Post . find(params[ : id]) 聽聽end 聽聽def聽destroy 聽聽聽聽render聽 : inline聽 => 聽 <<- EOS 聽聽聽聽聽 Are you sure? 聽聽聽聽聽聽 <%= 聽link_to聽 " Yes " , 聽{} , 聽 : post聽 => 聽true聽 %> 聽聽聽聽聽聽<%= 聽link_to聽 " No " , 聽 : action聽 => 聽 ' edit ', :id => params[:id] %> 聽聽聽聽EOS 聽聽end 聽聽protected 聽聽def聽destroy_post 聽聽聽聽Post. find(params[ : id]) . destroy 聽聽聽聽redirect_to聽 : action聽 => 聽 ' list ' 聽聽end 聽聽def聽edit_post 聽聽聽聽@post 聽 = 聽Post . find(params[ : id]) 聽聽聽聽 if 聽 @post . update_attributes(params[ : post]) 聽聽聽聽聽聽flash[ : notice]聽 = 聽 ' Post聽was聽successfully聽updated. ' 聽聽聽聽聽聽redirect_to聽: action聽 => 聽 ' show ' , 聽 : id聽 => 聽 @post 聽聽聽聽else 聽聽聽聽聽聽render聽: action聽 => 聽 ' edit ' 聽聽聽聽end 聽聽end 聽聽def聽new_post 聽聽聽聽@post 聽 = 聽Post . new(params[ : post]) 聽聽聽聽 if 聽 @post . save 聽聽聽聽聽聽flash[ : notice]聽 = 聽 ' Post聽was聽successfully聽created. ' 聽聽聽聽聽聽redirect_to聽: action聽 => 聽 ' list ' 聽聽聽聽else 聽聽聽聽聽聽render聽: action聽 => 聽 ' new ' 聽聽聽聽end 聽聽end end
鐩稿簲鍦幫紝榪橀渶瑕佹妸new.rhtml涓殑action浠巆reate淇敼鍒皀ew錛屾妸edit.rhtml涓殑action浠巙pdate淇敼鍒癳dit銆?br /> 榪欐牱鐨勪慨鏀規妸蹇呴』浣跨敤post璇鋒眰鐨刟ction闅愯棌璧鋒潵錛岃岀浉搴旂殑get鎿嶄綔鏄笉淇敼鎴栧垹闄よ褰曠殑錛屽鏋滀互post璇鋒眰錛屾墠浼氳嚜鍔ㄨ皟鐢ㄨ繖浜涗繚鎶ょ殑鏂規硶銆?br /> ]]> [Ruby] Ruby AOP http://www.shnenglu.com/cpunion/archive/2006/09/16/12539.htmlqiezi qiezi Sat, 16 Sep 2006 01:46:00 GMT http://www.shnenglu.com/cpunion/archive/2006/09/16/12539.html http://www.shnenglu.com/cpunion/comments/12539.html http://www.shnenglu.com/cpunion/archive/2006/09/16/12539.html#Feedback 1 http://www.shnenglu.com/cpunion/comments/commentRss/12539.html http://www.shnenglu.com/cpunion/services/trackbacks/12539.html 鍦ㄥ叾瀹冭璦閲屽疄鐜癆OP鐨勭‘姣旇緝楹葷儲錛宩ava瑕佺敤鍒板姩鎬乸roxy錛屽鏋滄槸C錛嬶紜錛岄櫎浜嗕粠婧愮爜涓婁慨鏀硅繕鐪熸病濂藉姙娉曪紝aspectc灝辨槸榪欎箞鍋氱殑銆傞偅涔坮uby閲岄潰濡備綍瀹炵幇鍛紵 鐢變簬ruby鏄姩鎬佽剼鏈璦錛岃繍琛屾湡鍙互鎶婁竴涓柟娉曟敼鍚嶏紝涔熷彲浠ユ瀯閫犱竴涓瓧絎︿覆鍔ㄦ佺敓鎴愭柟娉曪紝閭d箞瀹炵幇榪欎釜灝變笉鏄毦浜嬩簡銆?br />module聽ExecuteBefore 聽聽def聽self . included(base) 聽聽聽聽base . extend(ClassMethods) 聽聽end 聽聽module聽ClassMethods 聽聽聽聽def聽execute_before(before_method , 聽 * methods) 聽聽聽聽聽聽methods . flatten . map ( &: to_sym) . each 聽 do 聽 | method | 聽聽聽聽聽聽聽聽alias_method聽" #{method}_old " . to_sym , 聽method 聽聽聽聽聽聽聽聽class_eval聽 <<- eval_end 聽聽聽聽聽聽聽聽聽聽def聽 # {method}(*args) 聽聽聽聽聽聽聽聽聽聽聽聽#{before_method}(*args) 聽聽聽聽聽聽聽聽聽聽聽聽#{method}_old(*args) 聽聽聽聽聽聽聽聽聽聽end 聽聽聽聽聽聽聽聽eval_end 聽聽聽聽聽聽end 聽聽聽聽end 聽聽end end
浣跨敤鏃跺彧闇瑕佸湪綾婚噷闈nclude榪欎釜妯″潡灝辮浜嗭紝鐩稿綋浜巑ixin鐨勫姛鑳姐?br />class聽TestController聽 < 聽ApplicationController 聽聽def聽 index 聽聽聽聽a(1 ) 聽聽聽聽b( 1 , 2 ) 聽聽聽聽c( 1 , 2 , 3 ) 聽聽聽聽render聽 : text聽 => 聽 ' hello ' 聽聽end 聽聽protected 聽聽def聽log ( * args) 聽聽聽聽puts聽 " log:聽#{args.map(&:to_s).join(',聽')} " 聽聽end 聽聽def聽a(a) 聽聽end 聽聽def聽b(a, b) 聽聽end 聽聽def聽c(a , b , c) 聽聽end 聽聽include聽ExecuteBefore 聽聽execute_before聽 : log , 聽 : a , 聽 : b , 聽 : c end
娉ㄦ剰錛岀敱浜庝嬌鐢╡xecute_before鏃跺悗闈㈠嚑涓柟娉曞繀欏昏鏈夊畾涔夛紝鎵浠ュ繀欏繪斁鍦ㄥ悗闈紝鍚﹀垯灝變細鍑洪敊銆?br /> ]]>[RoR] Rails unittest涓涓皬bug http://www.shnenglu.com/cpunion/archive/2006/09/16/12536.htmlqiezi qiezi Sat, 16 Sep 2006 01:32:00 GMT http://www.shnenglu.com/cpunion/archive/2006/09/16/12536.html http://www.shnenglu.com/cpunion/comments/12536.html http://www.shnenglu.com/cpunion/archive/2006/09/16/12536.html#Feedback 0 http://www.shnenglu.com/cpunion/comments/commentRss/12536.html http://www.shnenglu.com/cpunion/services/trackbacks/12536.html development_pgsql : 聽聽adapter: 聽postgresql 聽聽database : 聽myproject_development 聽聽username : 聽postgres 聽聽password : 聽 development_mysql : 聽聽adapter: 聽mysql 聽聽database : 聽myproject_development 聽聽username : 聽root 聽聽password : 聽 development : 聽聽development_mysql test: 聽聽adapter: 聽postgresql 聽聽database : 聽myproject_test 聽聽username : 聽postgres 聽聽password : 聽 production : 聽聽development
姝e父榪愯娌′粈涔堥棶棰樸傚悗鏉ュ彂鐜板湪榪愯rake test浣滃崟鍏冩祴璇曟椂浼氭姤閿欙紝鎶婃嫹璐濊繃鏉ュ氨娌℃湁闂銆備笉榪噐ubyonrails.com涓婁笉鍏佽鍖垮悕鎻愪氦bug錛岃繕鐪熼夯鐑︺?br /> 鍙﹀鍙戠幇config.active_record.schema_format = :ruby閰嶇疆涓嬶紝postgresql鐨則imestamp瀛楁榛樿鍊糲urrent_timestamp涓嶈兘姝g‘澶嶅埗鍒版暟鎹簱銆傜粡媯鏌ュ畠鏄嬌鐢╠b:schema:dump澶嶅埗涓嬫暟鎹簱妯″紡錛屽啀浣跨敤db:schema:load鐢熸垚嫻嬭瘯鏁版嵁搴撴ā寮忕殑錛岃繖涓ā鍧椾負浜嗗悇鏁版嵁搴撶粺涓錛屼細鍘繪帀閭d簺涓嶄竴鑷寸殑榛樿鍊箋傝В鍐沖姙娉曟槸璁劇疆config.active_record.schema_format = :sql銆?img src ="http://www.shnenglu.com/cpunion/aggbug/12536.html" width = "1" height = "1" /> ]]>[RoR] 淇update_attribute(s)鏇存柊鍏ㄩ儴瀛楁鐨勯棶棰?/title> http://www.shnenglu.com/cpunion/archive/2006/08/26/11712.htmlqiezi qiezi Fri, 25 Aug 2006 18:10:00 GMT http://www.shnenglu.com/cpunion/archive/2006/08/26/11712.html http://www.shnenglu.com/cpunion/comments/11712.html http://www.shnenglu.com/cpunion/archive/2006/08/26/11712.html#Feedback 0 http://www.shnenglu.com/cpunion/comments/commentRss/11712.html http://www.shnenglu.com/cpunion/services/trackbacks/11712.html 榪欐槸鍓嶆鏃墮棿鏈変漢璁ㄨ榪囩殑闂錛?
浠g爜:
order = Order.find(1) order.update_attribute(:status, 'finished')
鍋囧畾orders琛ㄦ湁10涓瓧孌碉紝浣犲彧鎯蟲洿鏂板叾涓竴涓紝浣哸ctive record浼氱敓鎴愪竴涓洿鏂板叏閮ㄥ瓧孌電殑SQL璇彞錛屽亣瀹氬叾涓竴涓瓧孌靛奸暱搴︽槸20K錛岃繖涓礋鎷呭彲鑳戒細鏈変簺閲嶃? 鎴戝皾璇曡В鍐寵繖涓棶棰橈紝鍐欎簡涓畝鍗曠殑鎻掍歡錛?
浠g爜:
module ActiveRecord 聽 class Base 聽 聽 def update_attribute(name, value) 聽 聽 聽 update_attributes(name => value) 聽 聽 end 聽 聽 def update_attributes(new_attributes) 聽 聽 聽 return if new_attributes.nil? 聽 聽 聽 attributes = new_attributes.dup 聽 聽 聽 attributes.stringify_keys! 聽 聽 聽 self.attributes = attributes 聽 聽 聽 update(attributes) 聽 聽 end 聽 聽 private 聽 聽 聽 def update(attrs = nil) 聽 聽 聽 聽 connection.update( 聽 聽 聽 聽 聽 "UPDATE #{self.class.table_name} " + 聽 聽 聽 聽 聽 "SET #{quoted_comma_pair_list(connection, attributes_with_quotes(false, attrs))} " + 聽 聽 聽 聽 聽 "WHERE #{self.class.primary_key} = #{quote(id)}", 聽 聽 聽 聽 聽 "#{self.class.name} Update" 聽 聽 聽 聽 ) 聽 聽 聽 聽 聽 聽 聽 聽 return true 聽 聽 聽 end 聽 聽 聽 def attributes_with_quotes(include_primary_key = true, attrs = nil) 聽 聽 聽 聽 (attrs || attributes).inject({}) do |quoted, (name, value)| 聽 聽 聽 聽 聽 if column = column_for_attribute(name) 聽 聽 聽 聽 聽 聽 quoted[name] = quote(value, column) unless !include_primary_key && column.primary 聽 聽 聽 聽 聽 end 聽 聽 聽 聽 聽 quoted 聽 聽 聽 聽 end 聽 聽 聽 end 聽 end end
attributes_with_quotes鍑芥暟鐨勫弬鏁版悶榪欎箞澶嶆潅錛屽師鍥犳槸鎴戞兂鍗充究鏄敤榪欐浠g爜鏇挎崲搴撻噷闈㈢殑閮ㄥ垎錛屼篃涓嶅獎鍝嶅師鏈変唬鐮佺殑姝e父鍔熻兘銆? 鍙互綆鍗曟祴璇曚竴涓嬩笂闈㈢殑渚嬪瓙錛屽畠鐢熸垚鐨凷QL璇彞浼氱畝媧佸緢澶氾紝澶ф鏄繖鏍峰瓙錛? UPDATE orders SET "status" = 'finished' WHERE id = 1宸插彂鐜扮殑BUG鍜屼慨澶嶏細 1銆佹病鏈夎皟鐢╲alidation (by cookoo)銆?/strong>鐢變簬鍘熸湁浠g爜璋冪敤save錛岃宻ave琚鐩栨垚鏈夐獙璇佺殑浠g爜錛屾墍浠ュ叿鏈夐獙璇佸姛鑳姐傝В鍐沖姙娉曟槸澧炲姞涓孌典唬鐮侊細
module聽ActiveRecord 聽聽module聽ValidationsFix 聽聽聽聽
def
聽self.append_features(base)聽
#
聽:nodoc:
聽聽聽聽聽聽super 聽聽聽聽聽聽base.class_eval聽do 聽聽聽聽聽聽聽聽alias_method聽:update_attributes_without_validation,聽:update_attributes 聽聽聽聽聽聽聽聽alias_method聽:update_attributes,聽:update_attributes_with_validation 聽聽聽聽聽聽end 聽聽聽聽end 聽聽聽聽
def
聽update_attributes_with_validation(new_attributes) 聽聽聽聽聽聽
return
聽
if
聽new_attributes.nil? 聽聽聽聽聽 attributes = new_attributes.dup 聽聽聽聽聽 attributes.stringify_keys! 聽聽聽聽聽聽self.attributes聽
=
聽attributes 聽聽聽聽聽聽
if
聽valid? 聽聽聽聽聽聽聽聽update_attributes_without_validation(attributes) 聽聽聽聽聽聽
else
聽聽聽聽聽聽聽聽
return
聽false 聽聽聽聽聽聽end 聽聽聽聽end 聽聽end end ActiveRecord::Base.class_eval聽do 聽聽include聽ActiveRecord::ValidationsFix end
綆鍗曟祴璇曢氳繃銆?/p>
]]> [ROR] &:id榪欑鐢ㄦ硶 http://www.shnenglu.com/cpunion/archive/2006/07/11/9688.htmlqiezi qiezi Tue, 11 Jul 2006 07:40:00 GMT http://www.shnenglu.com/cpunion/archive/2006/07/11/9688.html http://www.shnenglu.com/cpunion/comments/9688.html http://www.shnenglu.com/cpunion/archive/2006/07/11/9688.html#Feedback 0 http://www.shnenglu.com/cpunion/comments/commentRss/9688.html http://www.shnenglu.com/cpunion/services/trackbacks/9688.html class Symbol 聽 def to_proc 聽聽聽 Proc.new { |*args| args.shift.__send__(self, *args) } 聽 end end 瀹冩墿灞曞嚭榪欑鐢ㄦ硶錛?br /> (1..5).map(&:to_s) map鍘熸湰鏄鎺ュ彈涓涓猙lock鍙傛暟錛屾櫘閫氱殑鐢ㄦ硶鏄細 (1..5).map{|e| e.to_s} 鎴栬咃細 proc = Proc.new{|e| e.to_s} (1..5).map(&proc) 涓婇潰榪欎釜(1..5).map(&:to_s)鐢ㄦ硶鍙互鎷嗘垚3姝ユ潵瑙i噴錛?br />sym = :to_s proc = Proc.new{|*args| args.shift.send(sym, *args)} (1..5).map(&proc) 鏈変釜鐤戦棶錛岀粡榪噛anping.jia瑙i噴錛宮ap(&:to_s)鍥犱負鍑虹幇浜?amp;絎﹀彿錛屾墍浠?to_s浼氭墽琛宼o_proc鏂規硶錛岀劧鍚庝笌&涓璧峰悎鎴?amp;proc浜ょ粰map澶勭悊銆傝櫧鐒惰寰楅氾紝涓嶈繃鎴戞昏寰楄繖涓В閲婁腑錛?amp;榪欎釜絎﹀彿鍋氫簡2嬈″伐浣滐紝鏄惁鍚堢悊錛?br /> 榪欑鐢ㄦ硶鍘熸湰鏄疪uby Extensions Project鍙戞槑鐨勶紝鍦≧oR涓綔浜嗙偣淇敼銆傚師鏉ョ殑鐗堟湰鏄細 class Symbol 聽聽聽 def to_proc 聽聽聽聽聽 proc { |obj, *args| obj.send(self, *args) } 聽聽聽 end end 瀹冧嬌鐢?涓弬鏁版潵鍒嗗嚭涓涓弬鏁幫紝鑰孯oR鐗堟湰鍒欎嬌鐢╯hift鍒嗗嚭鏉ャ?br /> 鍒氭墠鍙堟兂浜嗕竴涓嬶紝yanping.jia鐨勮В閲婂簲璇ユ槸鍚堢悊鐨勶紝瑙i噴鍣ㄧ湅鍒?amp;:id鏃訛紝鍏堜細鍒ゆ柇鏄惁鏄竴涓柟娉曡皟鐢紝濡傛灉鏄垯闇瑕佹妸:id杞垚涓涓猵roc銆傚惁鍒欏氨鏄娉曢敊璇簡銆?img src ="http://www.shnenglu.com/cpunion/aggbug/9688.html" width = "1" height = "1" /> ]]>[ROR] 淇鈥滀嬌鐢≒OST鏂規硶鏃?閫氳繃URL鍙傛暟鏀瑰啓_session_id鏃犳晥鈥濈殑闂 http://www.shnenglu.com/cpunion/archive/2006/07/03/9346.htmlqiezi qiezi Mon, 03 Jul 2006 15:58:00 GMT http://www.shnenglu.com/cpunion/archive/2006/07/03/9346.html http://www.shnenglu.com/cpunion/comments/9346.html http://www.shnenglu.com/cpunion/archive/2006/07/03/9346.html#Feedback 1 http://www.shnenglu.com/cpunion/comments/commentRss/9346.html http://www.shnenglu.com/cpunion/services/trackbacks/9346.html
浣跨敤Flash 8鎻愪緵鐨凢ileReference鍙互鏂逛究鍦頒竴嬈¢夋嫨澶氫釜鏂囦歡涓婁紶錛屼笉榪囬櫎浜嗗湪IE涓婁互澶栵紝鍏跺畠嫻忚鍣ㄤ笂鐨勯兘浼氬嚭鐜癈ookie涓庢祻瑙堝櫒涓嶄竴鑷寸殑闂銆?br />
瑙e喅鍔炴硶錛?
鐩存帴鐨勫仛娉曞氨鏄湪涓婁紶鏃訛紝闄勫姞涓涓猻ession_id鍦║RL涓婏紝鍦ㄦ湇鍔$澶勭悊鏃朵嬌鐢ㄨ繖涓猄ession銆?br />
鍦≧ails涓紝鍙互鎶奯session_id=xxxx闄勫姞鍦║RL涓娿備笉榪囨祴璇曠殑緇撴灉鏄紝闄勫姞鐨剆ession_id鍙湁鍦℅ET璇鋒眰鏃舵墠姝e父錛孭OST璇風ず鏃朵細琚拷鐣ャ?br />
鐭ラ亾浜嗚繖涓鐐癸紝鍙渶瑕佸鎵綠ET鍜孭OST璇鋒眰澶勭悊鐨勫樊鍒備篃璐逛簡涓鐣懆鎶橈紝鎵嶅彂鐜伴棶棰樺嚭鍦╝ctionpack/lib/action_controller/cgi_ext/raw_post_data_fix.rb閲屻?br />
鍙渶瑕佸湪POST鏃朵篃澶勭悊涓涓婾RL鍙傛暟鍗沖彲銆傜敱浜庡畠鏄氳繃read_query_params鏂規硶鏉ュ垎寮澶勭悊鐨勶紝鎵浠ヨ鍦≒OST璇鋒眰鏃訛紝璋冪敤涓涓媟ead_query_params(:get)錛屽茍鎶婄粨鏋滃悎騫躲備唬鐮佸涓嬶細
@params.merge!(CGI.parse(read_query_params(:get))) if method == :post || method == :put
榪欒鍔犲埌initialize_query鏂規硶灝鵑儴鍗沖彲銆傜敱浜庡師鏉ョ殑鏂規硶鍙兘榪斿洖浜咢params錛屾墍浠ヤ篃鍔犱竴琛孈params鍦ㄧ粨灝撅紝浠ュ厤閫犳垚涓嶅繀瑕佺殑楹葷儲銆?img src ="http://www.shnenglu.com/cpunion/aggbug/9346.html" width = "1" height = "1" /> ]]>[RoR] 瀹炵幇涓涓猘uto_redirect_to http://www.shnenglu.com/cpunion/archive/2006/05/20/7434.htmlqiezi qiezi Fri, 19 May 2006 18:33:00 GMT http://www.shnenglu.com/cpunion/archive/2006/05/20/7434.html http://www.shnenglu.com/cpunion/comments/7434.html http://www.shnenglu.com/cpunion/archive/2006/05/20/7434.html#Feedback 0 http://www.shnenglu.com/cpunion/comments/commentRss/7434.html http://www.shnenglu.com/cpunion/services/trackbacks/7434.html 鎴戦亣鍒扮殑涓涓棶棰樻槸錛屽綋浣跨敤Ajax鏇存柊欏甸潰灞閮ㄥ唴瀹規椂錛宻ession鍐呭宸茬粡榪囨湡錛岃繖鏃墮渶瑕佹暣涓〉闈㈣煩杞埌鐧誨綍欏甸潰銆?br /> 鐩存帴璋冪敤redirect_to浼氫嬌灞閮ㄥ唴瀹規樉紺烘垚鐧誨綍欏甸潰錛屽畠鏄湪HTTP澶撮噷鍐欏叆閲嶅畾鍚戝弬鏁版潵瀹炵幇鐨勩傚湪鎴戣繖閲岀殑鐗規畩鎯呭喌涓嬶紝姝g‘鐨勫仛娉曟槸璁╁畠鎵ц涓涓寘鍚湪<script>鏍囪涓殑鑴氭湰錛屽湪鑴氭湰涓洿鏀圭獥鍙ocation鍊兼潵璺寵漿銆?br /> 涓嶈繃RoR涓嬌鐢ˋjax鏃訛紝浼氭牴鎹?update鍙傛暟鏉ュ喅瀹氭槸浣跨敤Updater榪樻槸Request銆傚鏋滀嬌鐢║pdater鏂瑰紡錛屽垯搴旇繑鍥炰竴孌電函鑴氭湰錛涘鏋滄槸Request鏂瑰紡錛屽簲榪斿洖涓孌靛寘鎷湪<script>鏍囪涓殑鑴氭湰錛涘鏋滄槸鏅氭柟寮忥紝灝卞簲璇ヤ嬌鐢ㄥ師鏈夌殑redirect_to鍑芥暟浜嗐傚洜涓烘湇鍔$鏃犳硶鍖哄垎浣跨敤鐨勬槸鍝鏂瑰紡鏉ヨ姹傦紝鎵浠ョ畝鍗曠殑鍋氭硶鏄瘡涓姹傞兘闄勫姞涓涓弬鏁扮敤鏉ュ尯鍒嗭紝涓嶅姞鍙傛暟鍒欐槸鏅氳姹傛柟寮忋?br /> 涓轟簡杈懼埌榪欎釜鐩殑錛屾垜淇敼浜唒rototype_helper涓殑remote_function鍑芥暟銆傝繖涓嚱鏁版牴鎹紶閫掕繘鏉ョ殑鍙傛暟鏉ュ喅瀹氫嬌鐢≧equest鎴栨槸Updater錛屾垜灝卞湪榪欓噷涓嬫墜錛?br />聽聽聽聽聽聽def聽remote_function(options) 聽聽聽聽聽聽聽聽javascript_options聽 = 聽options_for_ajax(options) 聽聽聽聽聽聽聽聽update聽 = 聽 '' 聽聽聽聽聽聽聽聽if 聽options[:update]聽and聽options[:update].is_a ? Hash 聽聽聽聽聽聽聽聽聽聽update聽聽 = 聽[] 聽聽聽聽聽聽聽聽聽聽update聽 << 聽 " success:'#{options[:update][:success]}' " 聽 if 聽options[:update][:success] 聽聽聽聽聽聽聽聽聽聽update聽 << 聽 " failure:'#{options[:update][:failure]}' " 聽 if 聽options[:update][:failure] 聽聽聽聽聽聽聽聽聽聽update聽聽 = 聽 ' { ' 聽 + 聽update.join( ' , ' )聽 + 聽 ' } ' 聽聽聽聽聽聽聽聽elsif聽options[:update] 聽聽聽聽聽聽聽聽聽聽update聽<< 聽 " '#{options[:update]}' " 聽聽聽聽聽聽聽聽end 聽聽聽聽聽聽聽聽function聽= 聽update.empty ? 聽 ? 聽 聽聽聽聽聽聽聽聽聽聽 " new聽Ajax.Request( " 聽: 聽聽聽聽聽聽聽聽聽聽 " new聽Ajax.Updater(#{update},聽 " 聽聽聽聽 聽聽聽聽聽聽聽聽url_options聽= 聽options[:url]聽聽聽聽聽聽聽聽ajax_options聽 = 聽options[:update]聽 ? 聽{:ajax聽 => 聽 ' update ' }聽:聽{:ajax聽 => 聽 ' request ' } 聽聽聽聽聽聽聽聽url_options聽 = 聽url_options.merge(ajax_options) 聽聽聽聽聽聽聽聽url_options聽= 聽url_options.merge(:escape聽 => 聽 false )聽 if 聽url_options.is_a ? 聽Hash 聽聽聽聽聽聽聽聽function聽 << 聽 " '#{url_for(url_options)}' " 聽聽聽聽聽聽聽聽function聽<< 聽 " ,聽#{javascript_options}) " 聽聽聽聽聽聽聽聽function聽= 聽 " #{options[:before]};聽#{function} " 聽 if 聽options[:before] 聽聽聽聽聽聽聽聽function聽 = 聽 " #{function};聽#{options[:after]} " 聽聽 if 聽options[:after] 聽聽聽聽聽聽聽聽function聽 = 聽 " if聽(#{options[:condition]})聽{聽#{function};聽} " 聽 if 聽options[:condition] 聽聽聽聽聽聽聽聽function聽 = 聽 " if聽(confirm('#{escape_javascript(options[:confirm])}'))聽{聽#{function};聽} " 聽 if 聽options[:confirm] 聽聽聽聽聽聽聽聽 return 聽function 聽聽聽聽聽聽end
鏈夌孩鑹茬殑2琛屾槸鎴戞坊鍔犵殑錛岀敱浜庤繖涓紪杈戝櫒鐨勫師鍥狅紝娌℃湁鏄劇ず鎴愭暣琛岀孩鑹層傝繖2琛岀殑浣滅敤鏄垽鏂槸鍚︽湁:update鍙傛暟錛岀敤瀹冩潵鍐沖畾鏄坊鍔燼jax=update榪樻槸ajax=request銆?br /> 鐜板湪鍙互瀹炵幇涓涓畝鍗曠殑auto_redirect_to浜嗭細聽聽def聽auto_redirect_to(method,聽url) 聽聽聽聽 case 聽method 聽聽聽聽when聽 ' request ' 聽聽聽聽聽聽request_redirect_to(url) 聽聽聽聽when聽' update ' 聽聽聽聽聽聽update_redirect_to(url) 聽聽聽聽else 聽聽聽聽聽聽redirect_to(url) 聽聽聽聽end 聽聽end 聽聽 聽聽def聽request_redirect_to(url) 聽聽聽聽render聽:update聽do 聽 | page | 聽聽聽聽聽聽page.redirect_to(url) 聽聽聽聽end 聽聽end 聽聽 聽聽def聽update_redirect_to(url) 聽聽聽聽render聽:inline聽=> 聽 <<- EOS 聽聽聽聽聽聽 < script聽language = " javascript " > 聽聽聽聽聽聽<%= 聽聽聽聽聽聽聽聽render聽:update聽do 聽 | page | 聽聽聽聽聽聽聽聽聽聽page.redirect_to(" #{url_for(url)} " ) 聽聽聽聽聽聽聽聽end 聽聽聽聽聽聽 %> 聽聽聽聽聽聽</ script > 聽聽聽聽EOS 聽聽end
浣跨敤helper鏂瑰紡浣垮畠鑳藉琚玦nclude鍒癆pplicationController涓氨琛屼簡銆?br /> 涓轟簡涓嶅拰鍙傛暟緇戝緱澶錛岃繖閲屾妸method浣滀負鍙傛暟鐢辮皟鐢ㄨ呬紶鍏ャ?br /> 浣跨敤鏂規硶錛屼互Login Engine涓轟緥錛屽畠鍦╝ccess_denied涓鐞嗚煩杞傚湪ApplicationController涓噸鍐欒繖涓嚱鏁幫細聽聽聽聽def聽access_denied 聽聽聽聽聽聽auto_redirect_to( params [:ajax],聽:controller聽 => 聽 " /user " ,聽:action聽 => 聽 " login " ) 聽聽聽聽聽聽 false 聽聽聽聽end聽聽
鐜板湪鍙互嫻嬭瘯浜嗐傝姹傚彲浠ユ槸鏅氱殑錛堣秴閾炬帴錛夛紝Updater鏂瑰紡錛堣姹傚埌涓涓狣IV閲岋級錛孯equest鏂瑰紡錛岀幇鍦ㄩ兘鑳藉璺寵漿鍒版紜〉闈€?br /> ajax鍙傛暟閫氳繃hack搴撲唬鐮佹潵瀹炵幇錛屽浜庝嬌鐢ㄨ呮潵璇村熀鏈笂鏄忔槑鐨勩?br /> ]]>[RoR] 鍦≧oR涓皟鐢?Net webservice http://www.shnenglu.com/cpunion/archive/2006/05/14/7138.htmlqiezi qiezi Sun, 14 May 2006 12:08:00 GMT http://www.shnenglu.com/cpunion/archive/2006/05/14/7138.html http://www.shnenglu.com/cpunion/comments/7138.html http://www.shnenglu.com/cpunion/archive/2006/05/14/7138.html#Feedback 0 http://www.shnenglu.com/cpunion/comments/commentRss/7138.html http://www.shnenglu.com/cpunion/services/trackbacks/7138.html using 聽System; using 聽System.Web; using 聽System.Web.Services; using 聽System.Web.Services.Protocols; [WebService(Namespace聽 = 聽 " http://tempuri.org/ " )] [WebServiceBinding(ConformsTo聽 = 聽WsiProfiles.BasicProfile1_1)] public 聽 class 聽Service聽:聽System.Web.Services.WebService { 聽聽聽聽[WebMethod] 聽聽聽聽 public 聽 string 聽HelloWorld( string 聽name)聽{ 聽聽聽聽聽聽聽聽 return 聽 " Hello,聽 " 聽 + 聽name; 聽聽聽聽} 聽聽聽聽 }
鍦≧oR欏圭洰閲岋紝娣誨姞app/apis/test_api.rb錛?br />class 聽TestApi聽 < 聽ActionWebService::API::Base 聽聽api_method聽:HelloWorld,聽:expects聽 => 聽[{:name聽 => 聽:string}],聽:returns聽 => 聽[:string] end
榪欐槸RoR閲岄潰閫氱敤鐨剋ebservice鍏冧俊鎭弿榪般?br /> 娣誨姞app/controllers/test_controller.rb:class 聽TestController聽 < 聽ApplicationController 聽聽web_client_api聽:test,聽:soap,聽 " http://localhost/test/Service.asmx " ,聽 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽:namespace聽 => 聽 " http://tempuri.org/ " , 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽:soap_action_base聽 => 聽 " http://tempuri.org " , 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽:driver_options => {:default_encodingstyle聽 => 聽SOAP::EncodingStyle::ASPDotNetHandler::Namespace聽} 聽聽 def 聽hello 聽聽聽聽render_text聽test.HelloWorld( " Li聽Jie " ) 聽聽end end
:soap_action_base閫夐」鏄竴涓慨琛ワ紝涓嶅姞榪欎釜閫夐」浼氫駭鐢烻OAPAction澶撮敊璇?br /> 榪愯鏈嶅姟鍣紝鍦ㄦ祻瑙堝櫒涓闂?test/hello錛屽彂鐜板悕瀛椾負絀恒傜粡榪囬暱鏃墮棿璋冭瘯錛屽彂鐜?Net鍦ㄨВ鏋怱OAP娑堟伅浣撴椂錛屼笉鑳藉鐞嗚繖縐嶅懡鍚嶇┖闂達細聽聽聽聽 < n1:HelloWorld聽 xmlns:n1 ="http://tempuri.org/" 聽聽聽聽聽聽聽聽soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" > 聽聽聽聽聽聽<name 聽 xsi:type ="xsd:string" >Li Jie </name > 聽聽聽聽</ n1:HelloWorld >
鎶妌1鍘繪帀灝辮浜嗐備笉榪囪繖閮ㄥ垎瀹炵幇鍦╮ubylib/soap/rpc/proxy.rb閲岄潰錛屽疄鍦ㄤ笉鏂逛究淇敼銆備負浜嗚榪欎釜嫻嬭瘯閫氳繃錛屾殏鏃跺仛浜嗙偣灝忎慨鏀癸細聽聽 def 聽route(req_header,聽req_body,聽reqopt,聽resopt) 聽聽聽聽req_env聽 = 聽::SOAP::SOAPEnvelope.new(req_header,聽req_body) 聽聽聽聽unless聽reqopt[:envelopenamespace].nil? 聽聽聽聽聽聽set_envelopenamespace(req_env,聽reqopt[:envelopenamespace]) 聽聽聽聽end 聽聽聽聽reqopt[:external_content]聽 = 聽nil 聽聽聽聽conn_data聽 = 聽marshal(req_env,聽reqopt) 聽聽聽聽 if 聽ext聽 = 聽reqopt[:external_content] 聽聽聽聽聽聽mime聽 = 聽MIMEMessage.new 聽聽聽聽聽聽ext.each聽do聽 | k,聽v | 聽聽聽聽聽聽聽聽聽聽mime.add_attachment(v.data) 聽聽聽聽聽聽end 聽聽聽聽聽聽mime.add_part(conn_data.send_string聽+ 聽 " \r\n " ) 聽聽聽聽聽聽mime.close 聽聽聽聽聽聽conn_data.send_string聽 = 聽mime.content_str 聽聽聽聽聽聽conn_data.send_contenttype聽 = 聽mime.headers[ ' content-type ' ].str 聽聽聽聽end聽聽聽聽conn_data.send_string.gsub!( / :n1 / ,聽 '' ) 聽聽聽聽conn_data.send_string.gsub!( / n1: / ,聽 '' ) 聽聽聽聽conn_data聽= 聽@streamhandler.send(@endpoint_url,聽conn_data, 聽聽聽聽聽聽reqopt[:soapaction]) 聽聽聽聽 if 聽conn_data.receive_string.empty? 聽聽聽聽聽聽 return 聽nil 聽聽聽聽end 聽聽聽聽unmarshal(conn_data,聽resopt) 聽聽end
鍔犵矖鐨?琛屾槸鎴戞坊鍔犵殑浠g爜錛屽媺寮哄彲浠ヨ瀹冨伐浣滐紝涓嶈繃鏄劇劧涓嶆槸姝g‘鐨勬柟娉曘?br /> 涓嶇煡閬撴槸涓嶆槸.Net搴撻噷闈㈢殑BUG銆?img src ="http://www.shnenglu.com/cpunion/aggbug/7138.html" width = "1" height = "1" /> ]]>[RoR] 鑴氭湰妯℃嫙RJS鍒鋒柊欏甸潰 http://www.shnenglu.com/cpunion/archive/2006/05/13/7087.htmlqiezi qiezi Sat, 13 May 2006 15:49:00 GMT http://www.shnenglu.com/cpunion/archive/2006/05/13/7087.html http://www.shnenglu.com/cpunion/comments/7087.html http://www.shnenglu.com/cpunion/archive/2006/05/13/7087.html#Feedback 0 http://www.shnenglu.com/cpunion/comments/commentRss/7087.html http://www.shnenglu.com/cpunion/services/trackbacks/7087.html 婕旂ず欏甸潰鐩存帴鍦ㄦ祻瑙堝櫒涓鐪嬨?br />婕旂ず涓嬭澆 ]]>[RoR] 鐢╦avascript鑴氭湰妯℃嫙涓涓猘ction http://www.shnenglu.com/cpunion/archive/2006/05/12/7046.htmlqiezi qiezi Fri, 12 May 2006 15:41:00 GMT http://www.shnenglu.com/cpunion/archive/2006/05/12/7046.html http://www.shnenglu.com/cpunion/comments/7046.html http://www.shnenglu.com/cpunion/archive/2006/05/12/7046.html#Feedback 0 http://www.shnenglu.com/cpunion/comments/commentRss/7046.html http://www.shnenglu.com/cpunion/services/trackbacks/7046.html 鏈変簺鏃跺欐垜浠茍涓嶉渶瑕佽姹傛湇鍔″櫒錛屽彧鎯沖湪嫻忚鍣ㄤ笂鎵ц鏌愪簺鑴氭湰鏇存柊錛屼絾鍙堟兂浣跨敤RJS銆傛墍浠ヤ負RoR澧炲姞浜嗚繖欏瑰姛鑳姐?br /> 浣跨敤鏂規硶錛?br />< script聽language = " javascript " > <%= 聽 render聽:update聽do聽 | page | 聽聽page.define_action聽' test_action ' 聽do 聽聽聽聽page.call_script聽 <<- EOS 聽聽聽聽聽聽alert(params.comment.title); 聽聽聽聽聽聽alert(params.comment.body); 聽聽聽聽EOS 聽聽聽聽page.replace_html聽 ' errors ' ,聽 ' ERROR ' 聽聽end 聽聽page.define_action聽' link_action ' 聽do 聽聽聽聽page.replace_html聽 ' errors ' ,聽 ' ERROR ' 聽聽end end%> </ script > < div聽id = " errors " ></ div > <%= 聽form_local_tag聽:html聽 => 聽{:action聽 => 聽 ' test_action ' }聽 %> 聽聽< input聽name = " comment[title] " 聽 />< br聽 /> 聽聽< input聽name = " comment[body] " 聽 />< br聽 /> 聽聽<%= 聽submit_tag聽 ' Create ' 聽 %> <%= 聽end_form_tag聽 %> <%= 聽link_to_local聽 ' Test ' ,聽:action聽 => 聽 ' link_action() ' 聽 %>
涓婇潰婕旂ず浜唂orm_local_tag鍜宭ink_to_local鐨勪嬌鐢紝鎵撳紑榪欎釜欏甸潰浠ュ悗錛屽彲浠ュ叧鎺夋湇鍔″櫒嫻嬭瘯錛屼細鍙戠幇瀹冧笉璇鋒眰鏈嶅姟鍣ㄤ篃鑳芥墽琛岀浉搴旇剼鏈?br /> define_action瀹氫箟涓涓剼鏈嚱鏁幫紝call_script鐢ㄦ潵瀹炵幇javascript鍜孯JS浠g爜鐨勬販鍚堛傚綋浣跨敤form_local_tag鏃訛紝action鏂規硶鐨勫弬鏁板凡緇忚澶勭悊榪囷紝鎵浠ュ彲浠ョ洿鎺ュ湪action涓嬌鐢╬arams.comment.title銆?br /> 褰撶劧鐜板湪榪樹笉瀹屽杽錛屾瘮濡傝繕鍙兘浣跨敤杞崲瀹岀殑欏甸潰妯℃澘錛屼竴浜涘姩鎬侀〉闈㈠皢鐪嬩笉鍑烘晥鏋溿傝鍋氬埌榪欑偣錛岄渶瑕佺敤javascript瀹炵幇涓鏁村鐨凙ctionView杈呭姪鏂規硶銆?br /> 涓嬮潰鎻愪緵涓涓拡瀵箁ails 1.1.2鐨勪竴涓ˉ涓佹枃浠訛細琛ヤ竵鏂囦歡涓嬭澆 ]]>[RoR] ActionController::Caching妯″潡緙撳瓨浣嶇疆BUG http://www.shnenglu.com/cpunion/archive/2006/05/09/6814.htmlqiezi qiezi Tue, 09 May 2006 03:35:00 GMT http://www.shnenglu.com/cpunion/archive/2006/05/09/6814.html http://www.shnenglu.com/cpunion/comments/6814.html http://www.shnenglu.com/cpunion/archive/2006/05/09/6814.html#Feedback 2 http://www.shnenglu.com/cpunion/comments/commentRss/6814.html http://www.shnenglu.com/cpunion/services/trackbacks/6814.html class聽CacheController聽 < 聽ApplicationController 聽聽caches_action聽 : cache_one 聽聽caches_page聽聽聽 : cache_two 聽聽 # end class聽TestController聽 < 聽ApplicationController 聽聽def聽one 聽聽聽聽render聽 : inline聽 => 聽 <<- EOS Test :: one < br聽 /> <%= 聽render_component聽 : controller聽 => 聽 ' cache ' , 聽 : action聽 => 聽 ' cache_one ' 聽 %> 聽聽聽聽EOS 聽聽end 聽聽def聽two 聽聽聽聽render聽: inline聽 => 聽 <<- EOS Test :: two < br聽 /> <%= 聽render_component聽 : controller聽 => 聽 ' cache ' , 聽 : action聽 => 聽 ' cache_two ' 聽 %> 聽聽聽聽EOS 聽聽end 聽聽# end cache_one鍜宑ache_two鐨勫疄鐜板氨鐪佺暐浜嗐?br /> 璁塊棶鐩存帴璁塊棶榪?涓猘ction錛岃兘澶熷湪姝g‘鐨勭洰褰曚笅鐢熸垚緙撳瓨鏂囦歡銆備笉榪囪闂畉est/one鍜宼est/two灝變細鍑虹幇緙撳瓨閿欒錛?涓紦瀛樻枃浠惰鐢熸垚鍒癈ACHE_ROOT/test涓嬶紝璇曟兂濡傛灉鍦ㄥ涓湴鏂逛嬌鐢╮ender_component錛屽氨浼氫駭鐢熷緢澶氫喚涓鏍峰唴瀹圭殑緙撳瓨銆?br /> request浼氳浼犻掔粰controller錛屽綋璁塊棶/test/one鏃訛紝榪欎釜request淇濈暀鏈夎繖涓猽rl銆傝皟鐢╮ender_component鏃訛紝浼氱敓鎴愪竴涓柊鐨刢ontroller錛岃繖涓猺equest涔熻浼犻掞紝涓嶈繃url鍗磋繕鏄?test/one錛屾墍浠ュ氨鏈夎繖涓棶棰樸?br /> 淇錛?br />module聽ActionController聽 # :nodoc: 聽聽module聽Caching 聽聽聽聽module聽Actions 聽聽聽聽聽聽class聽ActionCacheFilter聽 # :nodoc: 聽聽聽聽聽聽聽聽def聽before(controller) 聽聽聽聽聽聽聽聽聽聽 return 聽 unless 聽 @actions . include ? (controller . action_name . intern) 聽聽聽聽聽聽聽聽聽聽url聽 = 聽controller . url_for( : controller聽 => 聽controller . controller_name , 聽 : action聽 => 聽controller . action_name) 聽聽聽聽聽聽聽聽聽聽 if 聽cache聽 = 聽controller . read_fragment(url . split ( " :// " ) . last ) 聽聽聽聽聽聽聽聽聽聽聽聽controller . rendered_action_cache聽 = 聽true 聽聽聽聽聽聽聽聽聽聽聽聽controller . send ( : render_text , 聽cache) 聽聽聽聽聽聽聽聽聽聽聽聽false 聽聽聽聽聽聽聽聽聽聽end 聽聽聽聽聽聽聽聽end 聽聽聽聽聽聽聽聽def聽after(controller) 聽聽聽聽聽聽聽聽聽聽 return 聽 if 聽 ! @actions . include ? (controller . action_name . intern)聽 || 聽controller . rendered_action_cache 聽聽聽聽聽聽聽聽聽聽url聽 = 聽controller . url_for( : controller聽 => 聽controller . controller_name , 聽 : action聽 => 聽controller . action_name) 聽聽聽聽聽聽聽聽聽聽controller . write_fragment(url . split ( " :// " ) . last , 聽controller . response . body) 聽聽聽聽聽聽聽聽end 聽聽聽聽聽聽end 聽聽聽聽end 聽聽end end
閫氳繃鏇挎崲controller鍜宎ction鏉ヨВ鍐籌紝嫻嬭瘯緇撴灉姝g‘銆?br /> 涓嶈繃榪樻湁鍏跺畠闂娌′慨澶嶏紝姣斿url涓弬鏁扮殑闂錛岃櫧鐒惰皟鐢╮ender_component鏃舵垜騫舵病鏈変紶閫掑弬鏁幫紝浣嗗畠榪樻槸鎶婂弬鏁扮粰浼犻掍簡銆傚彟澶栨病鏈変慨澶峜aches_page鍜宖ragment銆?br /> 鍏跺疄榪欎釜闂鏄敱render_component甯︽潵鐨勶紝鎵浠ユ渶濂界殑淇鍔炴硶褰撶劧鏄慨澶嶈繖涓柟娉曪紝璁╁畠澶勭悊姝g‘鐨刢ontroller/action/params錛屾殏鏃惰繕娌℃壘鍑轟慨澶嶆柟娉曘?br /> ]]>[RoR] 綆鍗曠殑瑙掕壊鏉冮檺媯鏌ユ彃浠?/title> http://www.shnenglu.com/cpunion/archive/2006/05/08/6790.htmlqiezi qiezi Mon, 08 May 2006 13:30:00 GMT http://www.shnenglu.com/cpunion/archive/2006/05/08/6790.html http://www.shnenglu.com/cpunion/comments/6790.html http://www.shnenglu.com/cpunion/archive/2006/05/08/6790.html#Feedback 0 http://www.shnenglu.com/cpunion/comments/commentRss/6790.html http://www.shnenglu.com/cpunion/services/trackbacks/6790.html module聽ActionController聽 # :nodoc: 聽聽class聽CheckGroupError聽< 聽ActionControllerError聽 # :nodoc: 聽聽聽聽attr_reader聽 : group_name 聽聽聽聽def聽initialize(group_name) 聽聽聽聽聽聽 @group_name 聽 = 聽group_name 聽聽聽聽end 聽聽end 聽聽 聽聽class聽CheckRoleError聽 < 聽ActionControllerError聽 # :nodoc: 聽聽聽聽attr_reader聽 : role_name 聽聽聽聽def聽initialize(role_name) 聽聽聽聽聽聽 @role_name 聽 = 聽role_name 聽聽聽聽end 聽聽end 聽聽 聽聽class聽Base聽 # :nodoc: 聽聽聽聽def聽roles 聽聽聽聽聽聽[] 聽聽聽聽end 聽聽聽聽 聽聽聽聽def聽groups 聽聽聽聽聽聽[] 聽聽聽聽end 聽聽聽聽 聽聽聽聽def聽check_roles( * role_args) 聽聽聽聽聽聽role_args . each 聽 do 聽 | role | 聽聽聽聽聽聽聽聽check_role(role) 聽聽聽聽聽聽end 聽聽聽聽end 聽聽聽聽 聽聽聽聽def聽check_groups(* group_args) 聽聽聽聽聽聽group_args . each 聽 do 聽 | group | 聽聽聽聽聽聽聽聽check_group(group) 聽聽聽聽聽聽end 聽聽聽聽end 聽聽聽聽 聽聽聽聽def聽check_group(group) 聽聽聽聽聽聽raise聽CheckGroupError. new(group . to_s)聽 unless 聽groups() . include ? (group . to_s) 聽聽聽聽end 聽聽聽聽 聽聽聽聽def聽check_role(role) 聽聽聽聽聽聽raise聽CheckRoleError . new(role . to_s)聽聽聽 unless 聽roles() . include ? (role . to_s)聽聽聽聽聽聽 聽聽聽聽end 聽聽end 聽聽 end
鍙渶瑕佸湪ApplicationController涓疄鐜皉oles鍜実roups榪?涓柟娉曪紝瀵規暟鎹簱妯″紡娌℃湁浠諱綍闄愬埗錛屽彧瑕佽兘淇濊瘉榪?涓柟娉曡兘澶熷緱鍒板綋鍓嶇敤鎴風殑瑙掕壊鍜岀粍鍗沖彲銆?br /> 鏈?涓猚heck鏂規硶鍙敤錛屽彲浠繪剰浣跨敤涓涓垨澶氫釜銆?br /> 綆鍗曟ā鎷熸祴璇曚竴涓嬶細class聽ApplicationController聽 < 聽ActionController :: Base 聽聽def聽roles 聽聽聽聽 %w (add聽show) 聽聽end 聽聽def聽groups 聽聽聽聽 %w (users) 聽聽end end
class聽TestController聽 < 聽ApplicationController 聽聽def聽test1 聽聽聽聽check_role聽 : add 聽聽聽聽render_text聽 " OK " 聽聽end 聽聽def聽test2 聽聽聽聽check_role聽: add 聽聽聽聽check_group聽 : users 聽聽聽聽render_text聽 " OK " 聽聽end 聽聽def聽test3 聽聽聽聽check_groups聽: admin , 聽 : users 聽聽聽聽render_text聽 " OK " 聽聽end 聽聽def聽test4 聽聽聽聽check_roles聽: add , 聽 : remove 聽聽聽聽render_text聽 " OK " 聽聽end end
鍏朵腑錛宼est1銆乼est2閮戒細鎴愬姛錛岃宼est3鍜宼est4鍒欎細澶辮觸鏄劇ず寮傚父錛屽彧闇瑕佸鐞唕escue_action鎶婂畠淇敼涓鴻嚜宸辯殑鏄劇ず欏甸潰鍗沖彲銆?img src ="http://www.shnenglu.com/cpunion/aggbug/6790.html" width = "1" height = "1" /> ]]> [RoR] Login Engine琛ヤ竵 http://www.shnenglu.com/cpunion/archive/2006/05/08/6778.htmlqiezi qiezi Mon, 08 May 2006 13:13:00 GMT http://www.shnenglu.com/cpunion/archive/2006/05/08/6778.html http://www.shnenglu.com/cpunion/comments/6778.html http://www.shnenglu.com/cpunion/archive/2006/05/08/6778.html#Feedback 0 http://www.shnenglu.com/cpunion/comments/commentRss/6778.html http://www.shnenglu.com/cpunion/services/trackbacks/6778.html Login Engine鏄潪甯稿ソ鐢ㄧ殑涓涓櫥褰昬ngine錛屼笉榪囦篃鏈変釜緙虹偣錛屽畠鎶婄敤鎴蜂俊鎭紦瀛樺湪session閲屻傚鏋滅敤鎴鋒瘡嬈′慨鏀瑰畬鑷繁鐨勮祫鏂欙紝閮芥妸session鏇存柊鐨勮瘽錛岃嚜鐒舵槸涓嶄細鏈変粈涔堟暟鎹笉鍚屾鐨勯棶棰樸備笉榪囪瘯鎯寵繖鏍蜂竴縐嶆儏鍐碉細 1銆佺敤鎴稟鐧誨綍錛涚敤鎴稟鐨勪俊鎭皢淇濆瓨鍦╯ession[:user]閲屻?br />2銆佺鐞嗗憳鎿嶄綔鐢ㄦ埛A錛屼慨鏀圭敤鎴稟鐨勮祫鏂欏茍淇濆瓨銆?br />3銆佺敤鎴稟鍒鋒柊欏甸潰銆?/p>
濡傛灉鏄劇ず鐢ㄦ埛璧勬枡鏄粠session[:user]璇誨彇鐨勮瘽錛屾樉鐒剁敤鎴稟鐪嬪埌鐨勬槸鑰佺殑璧勬枡銆?br /> 姝g‘鐨勫仛娉曟槸綆$悊鍛樹慨鏀圭敤鎴瘋祫鏂欎互鍚庯紝鎶婄敤鎴穝ession閲岀殑鍐呭涔熸洿鏂幫紝褰撶劧榪欎釜瀹炴柦璧鋒潵鏈変簺鍥伴毦錛岀洰鍓嶇湅鏉ユ棤娉曠敱鐢ㄦ埛ID鑾峰緱瀵瑰簲鐨剆ession銆?br /> 鏈夋湅鍙嬭session閲屼笉搴旇緙撳瓨鐢ㄦ埛淇℃伅錛岃屽簲鍙繚瀛樼敤鎴稩D銆傝繖鏄紜殑錛岃繖鏍峰彲浠ヨВ鍐充笂闈㈢殑闂錛屼笉榪囧甫鏉ョ殑闂鏄瘡嬈¢兘瑕佷粠鏁版嵁搴撴煡璇€?br /> 濡傛灉姣忔鍒鋒柊欏甸潰閮戒粠鏁版嵁搴撻噸鏂拌鍙栫敤鎴蜂俊鎭紝瀵規ц兘褰卞搷鏄緢澶х殑銆傝瘯鎯充竴涓嬬敤鎴鋒鍦ㄦ祻瑙堜竴涓鍧涚殑甯栧瓙鍒楄〃錛岃繖涓〉闈㈠彲鑳芥墍鏈夌敤鎴風湅璧鋒潵閮芥槸涓鏍風殑錛屽敮涓涓嶄竴鏍風殑鍦版柟鏄笂闈㈢敤鎴蜂俊鎭殑鏄劇ず銆傜敱浜庡ぇ閮ㄥ垎鍐呭閮戒竴鏍鳳紝鍙互浣跨敤緙撳瓨鍔犲揩嫻忚閫熷害銆備笉榪囧嵈鐢變簬session閲屽彧淇濆瓨浜嗙敤鎴稩D錛屼笉寰椾笉璇誨彇鏁版嵁搴撴潵鑾峰緱鐢ㄦ埛淇℃伅錛岃繖鏍峰氨鎶婇熷害鍙堟嫋鎱簡銆?br /> 鎵浠ュ簲璇ユ妸鐢ㄦ埛淇℃伅緙撳瓨璧鋒潵錛屼絾瑕佷繚璇佸畠鑳藉強鏃舵洿鏂般傛柟娉曡嚜宸卞仛涓涓紦瀛樼鐞嗗櫒錛岃兘鏍規嵁鐢ㄦ埛ID寰楀埌鐢ㄦ埛淇℃伅錛屼篃鑳介殢鏃舵洿鏂板畠銆?br /> 瀛︾潃ActionController::Caching鍋氫簡涓涓猆serManager錛屽畠鍙互鏍規嵁綰跨▼閰嶇疆鏉ヨ嚜鍔ㄥ紑鍏充簰鏂ュ櫒錛?br />(/vender/plugins/login_engine/lib/login_engine/user_management.rb)
module聽UserManagement聽
#
:nodoc:
聽聽class聽UnthreadedUserManager聽
#
:nodoc:
聽聽聽聽def聽initialize聽
#
:nodoc:
聽聽聽聽聽聽
@users
聽
=
聽{} 聽聽聽聽end 聽聽聽聽 聽聽聽聽def聽get(user_id) 聽聽聽聽聽聽
@users
[user_id] 聽聽聽聽end 聽聽聽聽 聽聽聽聽def聽set(user_id
,
聽user) 聽聽聽聽聽聽
@users
[user_id]聽
=
聽user 聽聽聽聽end 聽聽end 聽聽 聽聽module聽ThreadSafety聽
#
:nodoc:
聽聽聽聽def聽get(user_id)聽
#
:nodoc:
聽聽聽聽聽聽
@mutex
.
synchronize聽{聽super聽} 聽聽聽聽end 聽聽聽聽def聽set(user_id
,
聽user)聽
#
:nodoc:
聽聽聽聽聽聽
@mutex
.
synchronize聽{聽super聽} 聽聽聽聽end 聽聽end 聽聽 聽聽class聽UserManager聽
<
聽UnthreadedUserManager 聽聽聽聽def聽initialize 聽聽聽聽聽聽super 聽聽聽聽聽聽
if
聽ActionController
::
Base
.
allow_concurrency 聽聽聽聽聽聽聽聽
@mutex
聽
=
聽Mutex
.
new 聽聽聽聽聽聽聽聽UserManager
.
send
(
:
include
,
聽ThreadSafety) 聽聽聽聽聽聽end 聽聽聽聽end 聽聽end 聽聽 聽聽@
@user_manager
聽
=
聽UserManagement
::
UserManager
.
new 聽聽 聽聽def聽set_current_user(user) 聽聽聽聽
return
聽session[
:
user_id]聽
=
聽nil聽
if
聽user
.
nil
?
聽聽聽聽session[
:
user_id]聽
=
聽user
.
id 聽聽聽聽cache_user(user) 聽聽end 聽聽 聽聽def聽current_user 聽聽聽聽get_user(session[
:
user_id]) 聽聽end 聽聽 聽聽def聽cache_user(user) 聽聽聽聽
return
聽
if
聽user
.
nil
?
聽聽聽聽@
@user_manager
.
set(user
.
id
,
聽user) 聽聽end 聽聽 聽聽def聽get_user(user_id) 聽聽聽聽@
@user_manager
.
get(user_id) 聽聽end end聽聽
淇敼(/verdor/plugins/login_engine/lib/login_engine.rb)錛?br /># .require 聽 ' login_engine/user_management ' module聽LoginEngine 聽聽include聽UserManagement 聽聽# .end 鍔犲叆涓婇潰鍔犵矖鐨?琛屻?br /> 淇敼(/verdor/plugins/login_engine/lib/login_engine/authenticated_system.rb)錛屾妸session[:user]鏇挎崲涓簊ession[:user_id]銆?br /> 淇敼(/verdor/plugins/login_engine/app/controllers/user_controller.rb):聽聽def聽login 聽聽聽聽 return 聽 if 聽generate_blank 聽聽聽聽 @user 聽 = 聽User . new(params[ : user]) 聽聽聽聽 if 聽user聽 = 聽User . authenticate(params[ : user][ : login] , 聽params[ : user][ : password]) 聽聽聽聽聽聽user . logged_in_at聽 = 聽 Time . now 聽聽聽聽聽聽user . save 聽聽聽聽聽聽set_current_user(user) 聽聽聽聽聽聽flash[ : notice]聽 = 聽 " Login聽successful " 聽聽聽聽聽聽redirect_to_stored_or_default聽: action聽 => 聽 ' home ' 聽聽聽聽else 聽聽聽聽聽聽@login 聽 = 聽params[ : user][ : login] 聽聽聽聽聽聽flash . now[ : warning]聽 = 聽 ' Login聽unsuccessful ' 聽聽聽聽end 聽聽end
聽聽def聽logout 聽聽聽聽set_current_user(nil) 聽聽聽聽redirect_to聽 : action聽 => 聽 ' login ' 聽聽end
聽聽def聽get_user_to_act_on 聽聽聽聽 @user 聽 = 聽current_user 聽聽end
綆鍗曟祴璇曪細require 聽 ' login_engine ' class聽ApplicationController聽< 聽ActionController :: Base 聽聽include聽LoginEngine 聽聽 聽聽helper聽 : user 聽聽model聽 : user 聽聽聽聽 聽聽before_filter聽 : login_required end
class聽ShowController聽 < 聽ApplicationController 聽聽def聽show 聽聽聽聽render_text聽 " User聽name:聽#{current_user.first_name} " 聽聽end end
class聽AdminController聽 < 聽ApplicationController 聽聽def聽edit 聽聽聽聽user聽 = 聽User . find(params[ : id]) 聽聽聽聽user . update_attributes( : first_name聽 => 聽params[ : name]) 聽聽聽聽cache_user(user) 聽聽聽 render_text "User name: #{user.first_name}" 聽聽end end
涓涓畝鍗曠殑妯℃嫙錛?br />1銆佺敤鎴稟浠嶪E鐧誨綍錛岃闂?show/show錛屽皢鏄劇ず鐢ㄦ埛鐨勫悕瀛椼?br />2銆佺鐞嗗憳浠嶧F鐧誨綍錛岃闂?show/show錛屽皢鏄劇ず綆$悊鍛樺悕瀛椼?br />3銆佺鐞嗗憳璁塊棶/show/show/2?name=hello錛屽叾涓?鏄敤鎴稟鐨処D銆傝繖灝嗘妸鐢ㄦ埛A鐨勫悕瀛椾慨鏀逛負hello銆?br />4銆佺敤鎴稟鍒鋒柊欏甸潰錛屽彲浠ョ湅鍒版樉紺虹殑鐢ㄦ埛鍚嶅瓧宸茬粡鍙戠敓鍙樺寲銆?br /> 浠ヤ笂榪囩▼璇磋繖涓慨鏀瑰凡緇忚揪鍒扮洰鐨勩傚疄鐜拌繖涓姛鑳藉茍涓嶉毦錛屼富瑕佹槸涓轟簡淇濈暀Login Engine鍘熸湁鐨勫姛鑳戒笉鍙樸?br /> 淇敼鍚庣殑浠g爜錛?br />www.shnenglu.com/Files/cpunion/login_engine.rar ]]> Ruby on Rails 涓枃緇?/title> http://www.shnenglu.com/cpunion/archive/2006/04/24/6140.htmlqiezi qiezi Mon, 24 Apr 2006 02:25:00 GMT http://www.shnenglu.com/cpunion/archive/2006/04/24/6140.html http://www.shnenglu.com/cpunion/comments/6140.html http://www.shnenglu.com/cpunion/archive/2006/04/24/6140.html#Feedback 0 http://www.shnenglu.com/cpunion/comments/commentRss/6140.html http://www.shnenglu.com/cpunion/services/trackbacks/6140.html
Subscribe to Ruby on Rails 涓枃緇?/b>
Browse Archives at groups.google.com
閭歡鍒楄〃浜ゆ祦鏂逛究浜涳紝嬈㈣繋澶у璁㈤槄銆?br /> 娉ㄦ剰錛?br />1銆佷笉瑕佷嬌鐢ㄩ偖浠惰嚜鍔ㄥ洖澶嶅姛鑳姐?br />2銆佷笉瑕佷嬌鐢ㄧ鍚嶃?br />3銆佸洖澶嶉偖浠舵敞鎰忚鍓紩鐢ㄣ?br />4銆佷嬌鐢ㄦ枃鏈偖浠躲?img src ="http://www.shnenglu.com/cpunion/aggbug/6140.html" width = "1" height = "1" /> ]]> Groovy on Rails 0.1鍙戝竷 http://www.shnenglu.com/cpunion/archive/2006/04/07/5141.htmlqiezi qiezi Fri, 07 Apr 2006 08:59:00 GMT http://www.shnenglu.com/cpunion/archive/2006/04/07/5141.html http://www.shnenglu.com/cpunion/comments/5141.html http://www.shnenglu.com/cpunion/archive/2006/04/07/5141.html#Feedback 0 http://www.shnenglu.com/cpunion/comments/commentRss/5141.html http://www.shnenglu.com/cpunion/services/trackbacks/5141.html 鍦╓INDOWS涓嬫墽琛岋紝閬囧埌涓皬BUG錛実rails.bat絎?琛岋細if "%GRAILS_HOME"=="" goto grailsHomeNotSet鏄敊璇殑錛屾敼鎴恑f "%GRAILS_HOME%"=="" goto grailsHomeNotSet灝卞彲浠ヤ簡銆傚悗闈篃鏈夌偣灝忛棶棰橈紝騫茶剢鍦↙INUX涓嬫祴璇曘?br /> 鐓х潃Quick Start鍋氫簡涓涓嬶紝榪樼畻欏哄埄錛屼笉榪囦緥瀛愭庝箞鍙粰浜嗕釜list鍛紵鎬庝箞涔熷緱鎶奵reate/update/delete緇欏畬鎴愬槢銆?br /> 鐚滅潃鍐欎簡涓猚reate:聽聽聽聽聽聽聽聽@Property聽create聽 = 聽{ 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽[聽post聽:聽 new 聽Post()聽] 聽聽聽聽聽聽聽聽} 聽聽聽聽聽聽聽聽@Property聽save聽 = 聽{ 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 new 聽Post( params ).save() 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽redirect(action:list) 聽聽聽聽聽聽聽聽}
鎬庝箞瀛樿繘鍘葷殑涓嶆槸鎴戦偅涓瓧絎︿覆錛岃屾槸[Ljava.lang.String;@18b5a73鍛€傘?br /> 鍙堢湅浜嗕笅鏂囨。錛屽湪controller閲岄潰鏄繖涔堢敤鐨勶細聽聽聽聽聽聽聽聽@Property聽save聽 = 聽{ 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽def聽post聽 = 聽 new 聽Post() 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽post.properties聽 = 聽 params 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽post.save() 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽redirect(action:list) 聽聽聽聽聽聽聽聽}
鍏跺畠閮藉緢鐩鎬技錛?br />class 聽PostController聽{ 聽聽聽聽聽聽聽聽@Property聽index聽 = 聽{聽redirect(action:list)聽} 聽聽聽聽聽聽聽聽@Property聽list聽 = 聽{ 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽[聽postList聽:聽Post.list()聽] 聽聽聽聽聽聽聽聽} 聽聽聽聽聽聽聽聽@Property聽create聽 = 聽{ 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽[聽post聽:聽 new 聽Post()聽] 聽聽聽聽聽聽聽聽} 聽聽聽聽聽聽聽聽@Property聽save聽 = 聽{ 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽def聽post聽 = 聽 new 聽Post() 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽post.properties聽 = 聽 params 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽post.save() 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽redirect(action:list) 聽聽聽聽聽聽聽聽} 聽聽聽聽聽聽聽聽@Property聽show聽= 聽{ 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽[聽post聽:聽Post. get ( params [ ' id ' ])聽] 聽聽聽聽聽聽聽聽} 聽聽聽聽聽聽聽聽@Property聽delete聽 = 聽{ 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽Post. get ( params [ ' id ' ]).delete() 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽redirect(action:list) 聽聽聽聽聽聽聽聽} 聽聽聽聽聽聽聽聽@Property聽edit聽 = 聽{ 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽[聽post聽:聽Post. get ( params [ ' id ' ])聽] 聽聽聽聽聽聽聽聽} 聽聽聽聽聽聽聽聽@Property聽update聽 = 聽{ 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽def聽post聽 = 聽Post. get ( params [ ' id ' ]) 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽post.properties聽 = 聽 params 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽post.save() 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽redirect(action:list) 聽聽聽聽聽聽聽聽} }
璇硶涓婃瘮RoR紼嶉夯鐑︾偣銆?br /> 鎺ョ潃嫻嬭瘯涓涓嬫煡璇細聽聽聽聽聽聽聽聽@Property聽list聽 = 聽{ 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽def聽title聽 = 聽 params [ ' title ' ] 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽def聽body聽 = 聽 params [ ' body ' ] 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽def聽postList 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽def聽c聽 = 聽Post.createCriteria() 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // if聽(title聽!=聽null聽&&聽title聽!=聽""聽&&聽body聽!=聽null聽&&聽body聽!=聽"") 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if 聽(title聽 && 聽body) 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽postList聽 = 聽c{ 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽like( " title " ,聽 " % " 聽 + 聽title聽 + 聽 " % " ) 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽like( " body " ,聽 " % " 聽 + 聽body聽 + 聽 " % " ) 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽} 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 else 聽 if 聽(title) 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽postList聽 = 聽c{ 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽like( " title " ,聽 " % " 聽 + 聽 + 聽title聽 + 聽 " % " ) 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽} 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 else 聽 if 聽(body) 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽postList聽 = 聽c{ 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽like( " body " ,聽 " % " 聽 + 聽body聽 + 聽 " % " ) 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽} 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 else 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽postList聽= 聽Post.list() 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽[聽postList聽:聽postList,聽post聽:聽 new 聽Post()聽] 聽聽聽聽聽聽聽聽}
list.gsp閲岄潰娣誨姞錛?br />聽聽聽聽聽聽聽聽聽聽聽 < g:form聽action = " list " 聽method = " post " > 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽< div聽 class = " dialog " > 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽< table > 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽< tr聽 class = ' prop ' > 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 < td聽valign = ' top ' 聽style = ' text-align:left; ' 聽width = ' 20% ' > 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 < label聽 for = ' title ' > Title: </ label > 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 </ td > 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽聽 聽聽聽 < td聽valign = ' top ' 聽style = ' text-align:left; ' 聽width = ' 80% ' 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 class = ' ${hasErrors(bean:post,field: ' title ' , ' errors ' )} ' > 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 < input聽type = ' text ' 聽name = ' title ' 聽value = ' ${post?.title} ' 聽 /> 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 </ td > 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 </ tr > 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽< tr聽 class = ' prop ' > 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 < td聽valign = ' top ' 聽style = ' text-align:left; ' 聽width = ' 20% ' > 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 < label聽 for = ' body ' > Body: </ label > 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 </ td > 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 < td聽valign = ' top ' 聽style = ' text-align:left; ' 聽width = ' 80% ' 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 class= ' ${hasErrors(bean:post,field: ' body ' , ' errors ' )} ' > 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 < input聽type = ' text ' 聽name = ' body ' 聽value = ' ${post?.body} ' 聽 /> 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 </ td > 聽聽聽 聽聽聽 聽聽聽 聽聽聽 聽聽聽 </ tr > 聽聽聽聽聽聽聽聽聽聽聽聽聽聽 </ table > 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽</ div > 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽< div聽 class = " buttons " > 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽< span聽 class = " formButton " > 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽< input聽type = " submit " 聽value = " Search " ></ input > 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽</ span > 聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽</ div > 聽聽聽聽聽聽聽聽聽聽聽</ g:form >
groovy鍐欎唬鐮佹尯鐑︾殑錛屽眬閮ㄥ彉閲忎篃瑕乨ef鏉ュ畾涔夛紵涓嶅畾涔夊氨鎻愮ず璇ュ彉閲忎笉鏄璞$殑瀛楁錛岃窡寰堝鑴氭湰璇█閮戒笉涓鏍楓傚鏋滀粠java涓婅漿榪囨潵錛屼細瑙夊緱榪樻槸鎸虹畝媧佺殑銆?br /> 鍊熷姪spring銆乭ibernate錛孏rails鎵鍋氱殑灝辨槸鏁村悎錛実roovy榪欎釜璇█濂藉儚騫舵病鏈夌壒鍒嚭浼楃殑鍦版柟錛屽ぇ閮ㄥ垎涓滆タ鍦ㄥ叾瀹冭剼鏈璦閲岄潰閮借兘鐪嬪埌銆傛垜瑙夊緱ruby鏇村鏄撴墿鍏咃紝鏇磋嚜鐢便侴rails瑕佹兂鎴愬姛錛岄櫎闈炲湪鏁堢巼涓婂ぇ騫呭害棰嗗厛錛屽氨嫻嬭瘯鏉ョ湅錛屽茍娌℃湁瑙夊緱寰堝揩錛屽畠涔熸病鎻愪緵涓瘎嫻嬪伐鍏楓傛嵁璇磖uby2.0涔熻閲嶅啓铏氭嫙鏈猴紝濡傛灉ruby鍙槸紼嶆參涓浜涳紝鑷劧榪樻槸閫塕oR姣旇緝濂姐?br /> ]]>rails鐩稿叧閾炬帴鏀墮泦 http://www.shnenglu.com/cpunion/archive/2006/03/23/4489.htmlqiezi qiezi Thu, 23 Mar 2006 04:53:00 GMT http://www.shnenglu.com/cpunion/archive/2006/03/23/4489.html http://www.shnenglu.com/cpunion/comments/4489.html http://www.shnenglu.com/cpunion/archive/2006/03/23/4489.html#Feedback 0 http://www.shnenglu.com/cpunion/comments/commentRss/4489.html http://www.shnenglu.com/cpunion/services/trackbacks/4489.html 鎵╁睍ActiveRecord紺轟緥錛?br />http://wiki.rubyonrails.com/rails/pages/ExtendingActiveRecordExample 澧炲姞created_by鍜寀pdated_by欖旀湳瀛楁錛?br />http://wiki.rubyonrails.com/rails/pages/Howto+Add+created_by+and+updated_by 宓屽闆嗗悎錛堟爲錛夛細 http://threebit.net/tutorials/nestedset/tutorial1.html http://api.rubyonrails.com/classes/ActiveRecord/Acts/NestedSet/ClassMethods.html acts_as_threaded鎻掍歡婕旂ず錛堝彲鍒朵綔璁哄潧銆侀偖浠剁嚎绱級錛?br />http://www.railtie.net/plugins/acts_as_threaded/threaded.swf ]]>瀛︿範Ruby鐨勪竴鐐逛綋浼?/title> http://www.shnenglu.com/cpunion/archive/2005/09/30/507.htmlqiezi qiezi Fri, 30 Sep 2005 04:12:00 GMT http://www.shnenglu.com/cpunion/archive/2005/09/30/507.html http://www.shnenglu.com/cpunion/comments/507.html http://www.shnenglu.com/cpunion/archive/2005/09/30/507.html#Feedback 0 http://www.shnenglu.com/cpunion/comments/commentRss/507.html http://www.shnenglu.com/cpunion/services/trackbacks/507.html 浠呬粎鏄釜浜虹殑涓鐐逛綋浼氥?BR> 棣栧厛瀹冨拰python閮藉睘浜庡姩鎬佽В閲婂瀷鑴氭湰璇█錛岄櫎姝や箣澶栵紝鏈夊緢澶氫笉鍚屻?BR> python鏄竴涓函綺圭殑鑴氭湰璇█錛屼互鏄撳鏄撶敤涓轟富錛孯uby鏇村鏉備竴浜涳紝瀹冪殑璇硶涓婃洿宕囧皻綆媧侊紝鍦ㄨ娉曞拰璇箟涓婃瘮python瑕佷弗鏍煎緱澶氥傝櫧鐒秔ython瑕佹眰浠ョ緝榪戞潵鎺у埗鏍煎紡錛屼絾闄や簡榪欑偣浠ュ錛屽叾瀹冩柟闈uby閮芥瘮瀹冭涓ユ牸錛屾煇浜涙柟闈㈠彲浠ヨ涓篟uby鈥滄洿鍍忔槸涓闂ㄧ湡姝g殑璇█鈥濄?BR> 鍒氬紑濮嬪錛屾參鎱㈡葷粨鍚с?BR> Ruby on Rails涔熺収鐫鍋氫簡涓鎶婏紝鏋滅劧寰堥叿錛屽彧鏄湁浜涙暀紼嬪拰鐩墠鐨勭増鏈笉涓鑷淬?BR> 瀵筊uby榪樹笉鐔燂紝瑕佸仛欏圭洰涔熷彧濂藉厛瀛︿竴涓嬭璦浜嗭紝瀵筊uby鎰熷叴瓚o紝涓鏄湅鍒頒簡Ruby on Rails錛屽彟澶栧氨鏄湡鐨勫幓瀛︿範鏃訛紝鎵嶅彂鐜板畠涓嶆槸鍙︿竴涓猵ython/js/vb/php絳夎剼鏈璦銆?/P> ]]> Ruby瀛︿範璧勬簮 http://www.shnenglu.com/cpunion/archive/2005/09/28/477.htmlqiezi qiezi Wed, 28 Sep 2005 13:12:00 GMT http://www.shnenglu.com/cpunion/archive/2005/09/28/477.html http://www.shnenglu.com/cpunion/comments/477.html http://www.shnenglu.com/cpunion/archive/2005/09/28/477.html#Feedback 0 http://www.shnenglu.com/cpunion/comments/commentRss/477.html http://www.shnenglu.com/cpunion/services/trackbacks/477.html
Ruby瀹樻柟緗戠珯錛?A >www.ruby-lang.org
Ruby鍥藉唴涓枃绔欙細http://www.ruby-cn.org/
Ruby on Rails錛?A >http://www.rubyonrails.org/
Ajax on Rails錛?A >http://www.onlamp.com/lpt/a/5944
聽
]]> 青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
性色av一区二区怡红 |
欧美激情一区 |
久久精品成人欧美大片古装 |
欧美一区二区免费观在线 |
久久综合久久88 |
亚洲精品影院在线观看 |
亚洲欧美日韩一区二区 |
狼狼综合久久久久综合网
|
亚洲国产裸拍裸体视频在线观看乱了中文 |
国产欧美日韩免费 |
在线日韩欧美 |
亚洲欧美激情视频 |
欧美a级片网 |
亚洲夜间福利 |
欧美不卡三区 |
国产精品有限公司 |
亚洲视频www |
欧美韩日一区二区 |
欧美日韩在线播放一区二区 |
激情成人av |
亚洲视频一二三 |
久久国产精品72免费观看 |
欧美激情第8页 |
一区二区在线观看视频在线观看 |
欧美成年人网 |
国产精品久久久久久久久久尿 |
亚洲国产精品va在线看黑人 |
久久久水蜜桃av免费网站 |
亚洲欧美国产毛片在线 |
国产精品尤物福利片在线观看 |
美女黄色成人网 |
久久综合给合 |
亚洲欧美日韩视频一区 |
欧美成ee人免费视频 |
欧美制服丝袜第一页 |
欧美一区二区三区免费在线看
|
久久精品二区亚洲w码 |
一区二区三区毛片 |
亚洲精品免费观看 |
欧美日韩亚洲天堂 |
欧美aⅴ99久久黑人专区 |
国产精品国产三级国产aⅴ入口
|
狠狠色综合网 |
蜜乳av另类精品一区二区 |
欧美午夜激情小视频 |
亚洲欧美资源在线 |
欧美在线观看视频在线 |
伊人成年综合电影网 |
亚洲电影在线播放 |
欧美日韩18 |
性欧美长视频 |
欧美性色aⅴ视频一区日韩精品 |
亚洲国产成人午夜在线一区
|
国产精品嫩草久久久久 |
日韩视频一区 |
国产香蕉97碰碰久久人人 |
久久久久国产精品麻豆ai换脸 |
久久久久一区二区 |
亚洲精品视频免费在线观看 |
亚洲日本免费 |
日韩亚洲欧美中文三级 |
亚洲午夜一区二区三区 |
亚洲午夜精品一区二区 |
欧美一级片在线播放 |
午夜欧美理论片 |
国产精品午夜久久 |
蜜乳av另类精品一区二区 |
黄色国产精品 |
久久亚洲综合网 |
亚洲影院免费观看 |
裸体歌舞表演一区二区 |
亚洲一二三级电影 |
国产精品成人av性教育 |
亚洲图片激情小说 |
欧美一区二区视频在线观看 |
国产在线乱码一区二区三区 |
亚洲人成人99网站 |
一区二区免费在线播放 |
亚洲精品三级 |
亚洲乱码国产乱码精品精天堂 |
制服丝袜亚洲播放 |
午夜久久资源 |
精品成人一区二区 |
欧美福利一区二区 |
亚洲一区二区在线免费观看视频 |
1024日韩 |
欧美天天在线 |
亚洲精品久久久久久下一站 |
亚洲视频在线观看免费 |
国产欧美一区二区精品性色 |
狼人天天伊人久久 |
日韩视频在线观看免费 |
久久成人18免费观看 |
在线免费观看日本一区 |
欧美午夜不卡 |
久久日韩精品 |
亚洲视频碰碰 |
欧美aa国产视频 |
午夜天堂精品久久久久 |
亚洲国产裸拍裸体视频在线观看乱了中文
|
国产农村妇女精品 |
狼人天天伊人久久 |
亚洲男人第一av网站 |
欧美激情亚洲自拍 |
久久福利资源站 |
洋洋av久久久久久久一区 |
免费在线观看一区二区 |
欧美国产一区视频在线观看 |
亚洲图中文字幕 |
亚洲第一精品福利 |
国产啪精品视频 |
欧美日韩免费在线视频 |
久久三级视频 |
欧美一区二区在线视频 |
一本色道久久88亚洲综合88 |
亚洲一区影院 |
亚洲免费高清 |
在线精品观看 |
国产性色一区二区 |
国产精品久久毛片a |
欧美日韩国产首页 |
免费日韩一区二区 |
久久久噜噜噜久久中文字免 |
亚洲一区中文 |
亚洲视频中文 |
一卡二卡3卡四卡高清精品视频 |
亚洲福利专区 |
欧美激情成人在线 |
免费欧美在线视频 |
久久久久综合网 |
久久久97精品 |
久久国产精品72免费观看 |
午夜在线播放视频欧美 |
亚洲女ⅴideoshd黑人 |
正在播放亚洲一区 |
亚洲视频1区2区 |
亚洲天堂成人 |
亚洲性人人天天夜夜摸 |
亚洲线精品一区二区三区八戒 |
在线视频精品一 |
亚洲视频播放 |
亚洲男人的天堂在线 |
亚洲综合丁香 |
久久av一区二区三区漫画 |
久久国产精品久久久久久久久久 |
欧美一级艳片视频免费观看 |
欧美一区二区在线观看 |
久久国产日韩 |
嫩草影视亚洲 |
亚洲片在线观看 |
一本色道久久综合狠狠躁篇怎么玩 |
99精品国产一区二区青青牛奶 |
日韩视频在线一区二区三区 |
午夜亚洲视频 |
美女主播一区 |
久久九九电影 |
欧美日韩亚洲一区二区三区四区 |
欧美成人国产 |
欧美日韩在线视频首页 |
国产精品综合久久久 |
国产日韩欧美在线播放 |
在线观看日韩 |
宅男精品导航 |
久久精品在线观看 |
欧美91精品 |
一区二区免费在线视频 |
久久本道综合色狠狠五月 |
免费成人网www |
国产精品国产精品国产专区不蜜 |
国产在线观看91精品一区 |
精品动漫一区 |
亚洲一区二区三区免费观看
|
亚洲精品在线免费观看视频 |
亚洲香蕉成视频在线观看 |
久久久久国产精品午夜一区 |
欧美成人一区二免费视频软件 |
午夜精品视频一区 |
久久久久一区 |
精品999日本 |
欧美高清视频免费观看 |
在线观看日韩av电影 |
亚洲激情欧美激情 |
先锋影音国产精品 |
欧美激情中文不卡 |
亚洲嫩草精品久久 |
欧美日韩高清不卡 |
在线不卡中文字幕 |
亚洲欧美视频 |
亚洲精品一品区二品区三品区 |
亚洲欧美在线磁力 |
欧美人与性动交cc0o |
久久精品一本 |
久久久久一区二区三区 |
欧美日韩一区二区三区在线 |
曰韩精品一区二区 |
久久本道综合色狠狠五月 |
夜夜夜久久久 |
亚洲一区二区综合 |
欧美日韩国产免费观看 |
亚洲国产精品第一区二区 |