Сколько кода в представлении направляющих в порядке?

Следующий скрипт запускается для меня в 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 }
5
задан Josh Moore 15 April 2009 в 09:32
поделиться

4 ответа

Я использую следующий статический метод в модели сайта, чтобы добиться чего-то подобного:

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 %>
4
ответ дан 13 December 2019 в 19:36
поделиться

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
1
ответ дан 13 December 2019 в 19:36
поделиться

Я бы пошел немного дальше, чем Маран. Обычно я делаю следующее:

  • Создаю named_scope в модели для выполнения поиска.
  • Вызовите named_scope из контроллера и сохраните результаты в переменной экземпляра.
  • Поместите только переменную экземпляра в представление.

Я бы использовал помощника только в случае крайней необходимости. При последующем возвращении к коду легче разобраться в вещах, если вы видите, что ваш контроллер настраивает данные, которые нужны представлению, а не представление, вызывающее помощник (еще один файл для просмотра).

1
ответ дан 13 December 2019 в 19:36
поделиться

Я не собираюсь говорить, что никогда не сделаю это (я бы соврал), но пример кода данное заставило бы меня нервничать. Я думаю, что я был бы более склонен доставлять данные в поле выбора с моего контроллера. Вспомогательный метод - еще один вариант, если я замечаю, что делаю что-то более одного раза. Я с большей вероятностью вижу дублирование в контроллере, чем в разных представлениях.

Если я использую один и тот же компонент HTML в нескольких представлениях, то я могу обнаружить, что пытаюсь найти партиалы или оборачивать все это в пользовательский помощник. : project_select () или что-то подобное.

Чем больше я работаю в мире MVC, тем больше я избегаю кода в представлениях. У меня есть ощущение, что какое-то мастерство дзен будет достигнуто, если я достигну состояния нулевого кода,

5
ответ дан 13 December 2019 в 19:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: