我想使用"列"在控制器中定义的部分文件中的实例变量,它正在工作,但我想知道有更好的方法吗?
控制器:
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 :(得分: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似乎是你不应该的。因此,就您的实例变量的使用而言,我相信您当前的行为是正确的(尽管您的控制器代码可能会被重构为整洁)。