2015-05-01 44 views
1

我想在控制器中定義的部分文件中使用「列」實例變量,它正在工作,但我想知道是否有更好的方法來做到這一點?在部分文件中的變量的範圍在軌道上

控制器:

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 

回答

0

一個重構可以在控制器來完成:

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中的渲染集合部分

0

您可以訪問partials中的實例變量 - 即直接在index.html.haml中訪問@columns,而不必將其作爲本地傳入。然而,the consensus似乎是你不應該的。所以就使用你的實例變量而言,我相信你當前的行爲是正確的(儘管你的控制器代碼可以重構爲整潔)。