Локальная переменная не определена в блоке response_to json - PullRequest
2 голосов
/ 21 января 2012

У меня есть следующий блок кода, который отображает форму. Форма будет иметь «действие» в зависимости от запрошенного формата.

respond_to do |format|
  format.html { render "new", :locals => {:format => "html"} }
  format.json do
    render 'new.html', {
      :locals       => {:format => "json"},
      :content_type => 'text/html',
      :layout       => false
    } 
  end
end

Проблема с :locals => {:format => "json"}. Блок format.html работает нормально, но форма, представленная format.json, имеет переменную @format, определенную, но пустую. Где я ошибся?

1 Ответ

1 голос
/ 21 января 2012

Локальные переменные не устанавливаются как переменные экземпляра при передаче для визуализации с параметром locals. Переменная формата должна быть доступна как локальная переменная (format vs @format)

Причина, по которой вы видите @format как определяемый, заключается в том, что именно так работает Ruby. Когда к переменным экземпляра обращаются до того, как они присвоены значению, они вернут nil:

@format # => nil
@format = 'value'
@format # => 'value'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...