rails 方法小结
Rails在Controller中使用helper方法
1 2 3 4 5 | view_context.link_to "link" , "http://www.baidu.com" or ActionController::Base.helpers.link_to "link" , "http://www.baidu.com" |
each_with_object
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | ###old_hash.each_with_object(初期化object) {|item, new_hash| block処理 } smile = { vocal: 'tim' , guitar: 'brian' , bass: 'tim' , drum: 'roger' } queen = smile.each_with_object({}) do |(key, val), member| member[key.to_sym] = case key when :vocal member[ :vocal ] = 'fleddie' when :bass member[ :bass ] = 'jhon' else val end end |
inject
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | ###old_hash.inject(初期化object) {|new_hash, item| block処理 } smile = { vocal: 'tim' , guitar: 'brian' , bass: 'tim' , drum: 'roger' } queen = smile.inject({}) do |member, (key, val)| member[key.to_sym] = case key when :vocal member[ :vocal ] = 'fleddie' when :bass member[ :bass ] = 'jhon' else val end member #injectの場合、ブロックでループする最後に作成中のhashを返す行が必要 end |
[1, 2, 3, 4].inject(0) { |result, element| result + element } # => 10 # inject带有一个参数和block。block中的两个参数是有含义的。第一个参数reslut在inject第一次执行block时把inject带的参数付值给它,element就是数组中的元素,该例中# # inject一共执行4次block,每次执行block完后,最后语句的结果再付值给result,如此循环,直到遍历数组中所有元素。我们深入这个例子看每一步执行的结果。 # 因为数组有4个元素,所以要执行4次block操作: # 第一次操作:result=0,既等于inject带的参数;element=1,既第一个元素;执行block后result + element =1,再把这个结果付值给result,所以在执行完第一次block后,# result = 1。 # 第二次操作:result=1,既上次运行block后的最后一条语句的结果;element=2,既第二个元素;执行block后付值result=3。 # 如此类推,直到最后一次执行完block,生产的值为10。就是inject的返回值了。 # inject可以不带参数,此时result的初始值为数组元素的第一个值。所以上例可改写成: [1, 2, 3, 4].inject{ |result, element| result + element } #=>10 hash = [[:first_name, 'Shane'], [:last_name, 'Harvie']].inject({}) do |result, element| result[element.first] = element.last result end hash # => {:first_name=>"Shane", :last_name=>"Harvie"} [1, 2, 3, 4, 5, 6].select { |element| element % 2 == 0 }.collect { |element| element.to_s } # => ["2", "4", "6"] array = [1, 2, 3, 4, 5, 6].inject([]) do |result, element| result << element.to_s if element % 2 == 0 result end array # => ["2", "4", "6"]
in_groups_of 和 in_groups
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | %w( 1 2 3 4 5 6 7 8 9 10 ).in_groups_of( 3 ) {|group| p group} [ "1" , "2" , "3" ] [ "4" , "5" , "6" ] [ "7" , "8" , "9" ] [ "10" , nil , nil ] %w( 1 2 3 4 5 ).in_groups_of( 2 , ' ' ) {|group| p group} [ "1" , "2" ] [ "3" , "4" ] [ "5" , " " ] %w( 1 2 3 4 5 ).in_groups_of( 2 , false ) {|group| p group} [ "1" , "2" ] [ "3" , "4" ] [ "5" ] ############################################################################################################## %w( 1 2 3 4 5 6 7 8 9 10 ).in_groups( 3 ) {|group| p group} [ "1" , "2" , "3" , "4" ] [ "5" , "6" , "7" , nil ] [ "8" , "9" , "10" , nil ] %w( 1 2 3 4 5 6 7 8 9 10 ).in_groups( 3 , ' ' ) {|group| p group} [ "1" , "2" , "3" , "4" ] [ "5" , "6" , "7" , " " ] [ "8" , "9" , "10" , " " ] %w( 1 2 3 4 5 6 7 ).in_groups( 3 , false ) {|group| p group} [ "1" , "2" , "3" ] [ "4" , "5" ] [ "6" , "7" ] |
arrray group elements
array = ["John", "Mike", "Bob", "Mike", "Bob"] array.group_by{ |x| x }.values #=>[["Mike", "Mike"], ["Bob", "Bob"], ["John"]] group_by(&:itself).values #=>[["Mike", "Mike"], ["Bob", "Bob"], ["John"]]
extract_options!
def my_method(*args) options = args.extract_options! puts "Arguments: #{args.inspect}" puts "Options: #{options .inspect}" end my_method(1,2) # Arguments: [1,2] # Options: {} my_method(1,2, :a => :b) # Arguments: [1,2] # Options: {:a => :b}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话