rails 方法小结

 

Rails在Controller中使用helper方法

view_context.link_to "link", "http://www.baidu.com"

or

ActionController::Base.helpers.link_to "link", "http://www.baidu.com"

  

each_with_object

###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

###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       

%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}

 

 

 

 

  

 

posted @ 2023-05-23 13:36  鞋带松了  阅读(5)  评论(0编辑  收藏  举报