Могу ли я вызвать действие в другом действии (в контроллере рельсов)? - PullRequest
10 голосов
/ 26 апреля 2010

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

А что будет, если оба действия будут иметь какой-то шаблон для визуализации?

Ответы [ 5 ]

18 голосов
/ 26 апреля 2010

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

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

def foo
  @x = 1
end

def bar
  @a = 2
end

def zoo
  foo
  bar
end
0 голосов
/ 26 апреля 2010

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

0 голосов
/ 26 апреля 2010

Да, вы можете сделать это. И если вы, возможно, сделаете один макет 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 (просмотр) вы можете использовать переменную

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

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

веселит, Самира

0 голосов
/ 26 апреля 2010

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

0 голосов
/ 26 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...