Ruby on rails Rails如何引用什么';它已经在一个街区外了

Ruby on rails Rails如何引用什么';它已经在一个街区外了,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,在迭代实际开始之前,有没有办法从块外的块中获取结果变量 我希望能够将激活变量和输出放在的“折叠”位置旁边 下面是到目前为止我的代码 def sidebar_menu_item(top_menu_args, data_target, sub_menu_args, icon = "angle-left") haml_tag :li, :class => "panel" do haml_tag:a, :href => "#", :class =>

在迭代实际开始之前,有没有办法从块外的块中获取结果变量

我希望能够将
激活
变量和输出放在
的“折叠”
位置旁边

下面是到目前为止我的代码

def sidebar_menu_item(top_menu_args, data_target, sub_menu_args, icon = "angle-left")
        haml_tag :li, :class => "panel" do
            haml_tag:a, :href => "#", :class => "accordion-toggle", "data-present" => "#menu", "data-toggle" => "collapse", "data-target" => "##{data_target}" do
                haml_concat "<i class='fa fa-#{top_menu_args[1]}'></i> #{top_menu_args[0]}"
                haml_tag :span, :class => "pull-right" do
                    haml_tag :i, :class => "fa fa-angle-left"
                end
            end
            haml_tag :ul, :class => "collapse", :id => data_target do
                sub_menu_args.each do |menu_args|
                    link = menu_args[0]
                    label = menu_args[1]
                    action = "/#{params[:action]}" if params[:action] != "index"
                    current_uri = "/#{params[:controller]}#{action}"
                    if link == current_uri
                        active = { :class => "active" }
                    end
                    haml_tag :li, active do
                        haml_tag :a, :href => link do
                            haml_concat "<i class='fa fa-angle-right'></i> #{label}"
                        end 
                    end
                end
            end
        end
    end
def侧栏菜单项(顶部菜单参数、数据目标、子菜单参数、图标=“左角度”)
haml_标签:li,:class=>“panel”do
haml#u标签:a,:href=>“#”,:class=>“手风琴切换”,“数据显示”=>“#菜单”,“数据切换”=>“折叠”,“数据目标”=>“#{数据目标}”do
haml_concat“{top_menu_args[0]}”
haml_标记:span,:class=>“向右拉”do
haml_标签:i,:class=>“左前角”
结束
结束
haml_标记:ul,:class=>“collapse”,:id=>data_目标do
子菜单参数。每个do菜单参数|
链接=菜单参数[0]
标签=菜单参数[1]
action=“/#{params[:action]}”如果params[:action]!=“索引”
当前_uri=“/#{params[:controller]}{action}”
if link==当前_uri
活动={:class=>“活动”}
结束
haml_标签:li,活动do
haml_标签:a,:href=>链接do
haml_concat“#{label}”
结束
结束
结束
结束
结束
结束

我不认识哈姆,但你能这样做吗

您可以将目标传递到当前页面方法,如下所示:

current_page?(root_path) 
它将返回true或false。然后做一些类似的事情:

:class => ("active" if current_page?(root_path))

您可以使用map迭代,而不是使用它将返回元素数组的每个元素

sub_menu_args.map do |menu_args|
                link = menu_args[0]
                label = menu_args[1]
                action = "/#{params[:action]}" if params[:action] != "index"
                current_uri = "/#{params[:controller]}#{action}"
                active = { :class => "active" } if (link ==current_uri)                 
            end

请格式化您的代码。这很难读。记住,在Ruby中总是1个Tab==2个空格。helper方法不适合这种Rails疯狂。