Когда действие в контроллере назвали, я могу затем назвать другое действие от того действия?
И что произошло бы, если оба действия имеют некоторый шаблон для рендеринга?
Да, можно, если он находится в том же контроллере.
Вызов zoo
предоставит шаблон для зоопарка с экземплярами для @x
и @a
. Ни foo, ни bar не будут отображаться. Если вы явно установили метод render
, то вы можете получить ошибку двойной визуализации, если только вы не вернете
до вызова второй визуализации.
def foo
@x = 1
end
def bar
@a = 2
end
def zoo
foo
bar
end
Вы можете использовать redirect_to для вызова другого действия в вашем контроллере. Чтобы отобразить один шаблон внутри другого, вы можете использовать партиалы и / или макеты.
Да, вы можете это сделать. И если вы, вероятно, можете сделать один макет 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
Кто прав насчет того, как вызывать действия, но если вы вызываете действие внутри действия, вам необходимо провести рефакторинг вашего кода, чтобы извлечь логику он выполняет то, что вы пытаетесь выполнить, в своем собственном действии, а затем позволяет каждому действию отображать свой собственный шаблон.
Если вы хотите сделать это, потому что в обоих действиях есть какой-то общий код, возможно, лучше реорганизовать этот код в before_filter.