Следующий скрипт запускается для меня в Windows 10 версии 1809:
$computer = '.' # $env:COMPUTERNAME
$namespaces = "ROOT\SecurityCenter", "ROOT\SecurityCenter2"
$classname = "FirewallProduct"
$ActiveFireWall = foreach ($namespace in $namespaces) {
$aux = Get-WmiObject -Class $classname -Namespace $namespace -ComputerName $computer
if ($aux) {
$aux | Select-Object -Property [a-z]* -ExcludeProperty PSComputerName,
Scope, Path, Options, ClassPath, Properties, SystemProperties,
Qualifiers, Site, Container
}
}
if ( $ActiveFireWall ) { $ActiveFireWall.displayName }
Я использую следующий статический метод в модели сайта, чтобы добиться чего-то подобного:
class Site
def self.select_options
Site.find(:all, :order => 'UPPER(name)').collect {|s| [s.name, s.id]}
end
def
Затем в моем представлении домена я вызываю:
<%= f.select :site_id, Site.select_options %>
Это действительно работает хорошо для этих обстоятельств.
В вашем случае вы можете попробовать:
class CodesecureProject
def self.select_options
CodesecureProject.find(:all, :order => 'name').collect {|p| [p.name, p.id]}
end
end
А затем вызвать его через представление с помощью:
<%= f.select :codesecure_project_id, CodesecureProject.select_options %>
I have a lot of the same code in my projects except I try to don't do any finds. In your case I would make an named scope
named_scope :order, lambda { |order| {:order => order}}
and make the code:
CodesecureProject.order(:name).collect {|project| [project.name, project.id] }
It's a little cleaner.
If you got a lot of select boxes which need a name and an id (I sure do sometimes), you could also try making a helper that excepts a ModelName and returns the array you need.
def magic_for_select(model)
model.all.collect{|instance| [instance.name, instance.id]}
end
Я бы пошел немного дальше, чем Маран. Обычно я делаю следующее:
Я бы использовал помощника только в случае крайней необходимости. При последующем возвращении к коду легче разобраться в вещах, если вы видите, что ваш контроллер настраивает данные, которые нужны представлению, а не представление, вызывающее помощник (еще один файл для просмотра).
Я не собираюсь говорить, что никогда не сделаю это (я бы соврал), но пример кода данное заставило бы меня нервничать. Я думаю, что я был бы более склонен доставлять данные в поле выбора с моего контроллера. Вспомогательный метод - еще один вариант, если я замечаю, что делаю что-то более одного раза. Я с большей вероятностью вижу дублирование в контроллере, чем в разных представлениях.
Если я использую один и тот же компонент HTML в нескольких представлениях, то я могу обнаружить, что пытаюсь найти партиалы или оборачивать все это в пользовательский помощник. : project_select () или что-то подобное.
Чем больше я работаю в мире MVC, тем больше я избегаю кода в представлениях. У меня есть ощущение, что какое-то мастерство дзен будет достигнуто, если я достигну состояния нулевого кода,