Mic*_*ant 2 ruby ruby-on-rails ruby-on-rails-3
我试图将for x in y循环切换为each_with_index.首先,我试图切换for到each.之前的代码是
...
- row_bg_color_group = 'row_color_group_1'
- for link in @links
- construct_hyperlink(link.url_address, link.alt_text)
- if link.group.group_name != (current_group ||= '')
- display_group = current_group = link.group.group_name
- row_bg_color_group = rotate_rows_color_group
- else
- display_group = ''
%tr{:class => "#{row_bg_color_group}"}
%td
= link_to display_group, link.group, {"title" => link.group.group_description}
%td
%span#mainLink
= sanitize @address_url
%td= link.version_number
....
Run Code Online (Sandbox Code Playgroud)
并且rotate_rows_color_group是app/helpers的帮助者.代码是
def rotate_rows_color_group
if session[:group_shading] == 'true' || params[:show]
cycle('row_color_group_1 color_group_1', 'row_color_group_2 color_group_2', 'row_color_group_3 color_group_3')
else
cycle('row_color_group_1', 'row_color_group_2', 'row_color_group_3')
end
end
Run Code Online (Sandbox Code Playgroud)
我做的最初改变就是转换
- for link in @links
Run Code Online (Sandbox Code Playgroud)
成为
- @links.each do |link|
Run Code Online (Sandbox Code Playgroud)
这改变了我的观点
至
组名重复出现.这是范围问题吗?
由于.each使用了块,因此每次输入时都会重新声明其中声明的任何变量.
要避免这种情况,只需current_group在块外声明:
...
- row_bg_color_group = 'row_color_group_1'
- current_group = ''
- @links.each do |link|
- construct_hyperlink(link.url_address, link.alt_text)
- if link.group.group_name != current_group
- display_group = current_group = link.group.group_name
- row_bg_color_group = rotate_rows_color_group
- else
- display_group = ''
%tr{:class => "#{row_bg_color_group}"}
%td
= link_to display_group, link.group, {"title" => link.group.group_description}
%td
%span#mainLink
= sanitize @address_url
%td= link.version_number
....
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
57 次 |
| 最近记录: |