rails中部分文件中变量的范围

时间:2015-05-01 16:43:17

标签: ruby-on-rails ruby

我想使用"列"在控制器中定义的部分文件中的实例变量,它正在工作,但我想知道有更好的方法吗?

控制器:

def index
     ### code here ####
    @columns= []
    Model.column_names.each do |col|
      cnd = "#{col}"
      if cnd == 'id' || cnd == 'abc_id' || cnd == "created_at" || cnd =="updated_at"
         next
      end
        @columns << cnd
    end
  end

index.html.haml

%fieldset.form-columned
  .row-fluid
   #### code here ######
   = render :partial => 'admin/partial', locals: {columns:@columns}

在部分文件中:_partial

    - columns.each do |cols|
      %tbody
        %td #{cols}
        %td

2 个答案:

答案 0 :(得分:0)

可以在Controller中完成一个重构:

def index
  reject_columns = ["id", "abc_id", "created_at", "updated_at"]
  @columns = Model.column_names.reject{ |c| reject.include?(c)  }
end

对于_partial重构,您可以直接在_partial中使用@columns,您不需要传递本地,因为它是一个实例变量。如果您愿意使用部分名称,则可以使用集合的渲染。请参阅http://guides.rubyonrails.org/layouts_and_rendering.html

中的渲染集合部分

答案 1 :(得分:0)

您可以访问部分中的实例变量 - 即直接在index.html.haml中访问@columns而不将其作为本地传递。但是,the consensus似乎是你不应该的。因此,就您的实例变量的使用而言,我相信您当前的行为是正确的(尽管您的控制器代码可能会被重构为整洁)。