Я могу назвать действие в другом действии (в контроллере направляющих)?

Когда действие в контроллере назвали, я могу затем назвать другое действие от того действия?

И что произошло бы, если оба действия имеют некоторый шаблон для рендеринга?

10
задан fivedigit 15 December 2014 в 14:08
поделиться

5 ответов

Да, можно, если он находится в том же контроллере.

Вызов zoo предоставит шаблон для зоопарка с экземплярами для @x и @a . Ни foo, ни bar не будут отображаться. Если вы явно установили метод render , то вы можете получить ошибку двойной визуализации, если только вы не вернете до вызова второй визуализации.

def foo
  @x = 1
end

def bar
  @a = 2
end

def zoo
  foo
  bar
end
18
ответ дан 3 December 2019 в 21:58
поделиться

Вы можете использовать redirect_to для вызова другого действия в вашем контроллере. Чтобы отобразить один шаблон внутри другого, вы можете использовать партиалы и / или макеты.

0
ответ дан 3 December 2019 в 21:58
поделиться

Да, вы можете это сделать. И если вы, вероятно, можете сделать один макет nil, чтобы он хорошо отображался в ваших представлениях

, скажем (в следующем примере используется 'my_controller' в качестве макета)

class my_controller < application_controller 

   def my_parent_method
     @text_from_my_child_method = child_method
   end 

   def child_method
     return 'hello from child_method'
     render :layout => false #here we are making the child_method layout false so that it #will not effect the parent method
   end

end

и в вашем 'my_parent_method.rhtml' (view) вы можете использовать переменную

<%= @text_from_my_child_method %> and it should print 'hello from child_method'

, надеюсь, это поможет

ура, sameera

-1
ответ дан 3 December 2019 в 21:58
поделиться

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

0
ответ дан 3 December 2019 в 21:58
поделиться

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

-1
ответ дан 3 December 2019 в 21:58
поделиться
Другие вопросы по тегам:

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