Ruby on rails rails中部分文件中变量的范围
我想在控制器中定义的部分文件中使用columns实例变量,它正在工作,但我想知道是否有更好的方法来实现它 控制器:Ruby on rails rails中部分文件中变量的范围,ruby-on-rails,ruby,Ruby On Rails,Ruby,我想在控制器中定义的部分文件中使用columns实例变量,它正在工作,但我想知道是否有更好的方法来实现它 控制器: 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
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
在部分文件中:\u部分
- columns.each do |cols|
%tbody
%td #{cols}
%td
可以在控制器中进行一次重构:
def index
reject_columns = ["id", "abc_id", "created_at", "updated_at"]
@columns = Model.column_names.reject{ |c| reject.include?(c) }
end
对于_partial重构,您可以直接使用_partial中的@columns,不需要传递局部变量,因为它是一个实例变量。如果愿意使用部分名称,可以使用集合的呈现。请参见中的呈现集合部分。您可以访问部分中的实例变量,即直接访问index.html.haml中的@columns,而无需将其作为本地变量传入。然而,似乎你不应该。所以就实例变量的使用而言,我相信您当前的行为是正确的,尽管您的控制器代码可以进行重构以保持整洁
def index
reject_columns = ["id", "abc_id", "created_at", "updated_at"]
@columns = Model.column_names.reject{ |c| reject.include?(c) }
end