Как получить устройство для рендеринга JavaScript в рельсы 3? - PullRequest
0 голосов
/ 25 марта 2011

Я пытаюсь найти способ использовать конкретный шаблон ошибок при наличии ошибок. Он попадает на правильную страницу, но пытается представить javascript как сам макет.

Вот мой код application.rb layout_by_resource:

def layout_by_resource
  if devise_controller? && !current_user.nil? && !current_user.role.nil? && (current_user.role == "superadmin" || current_user.role == "admin")
    "admin"
  elsif devise_controller? && !current_user.nil? && !current_user.role.nil? && current_user.role == "user"
    "user"
  elsif devise_controller? && current_user.nil?
    respond_to do |format|
      format.js { render :action => "layouts/errors", :layout => false, :locals => { :current_object => resource } }
      format.html { "application" }
    end
  else
    "application"
  end
end

Вот мой код формы устройства:

<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :remote => true) do |f| %>

<% end %>

Ответы [ 2 ]

0 голосов
/ 04 июля 2013

Итак, лучше поздно, чем никогда, я думаю (но, надеюсь, это поможет любому, кто наткнется на эту страницу через Google).

То, что я должен был сделать, чтобы Devise правильно отображал javascript, - это сказать ему, чтобы он не отображал никакой компоновки, аля:

render "fail.js", :layout => false

Это сработало, и теперь мой JS срабатывает, как и ожидалось.

0 голосов
/ 25 марта 2011
respond_to do |format|
      format.js { render :action => "layouts/errors", :layout => false, :locals => { :current_object => resource } }
      format.html { "application" }
end

Замените вышеуказанный сегмент кода следующим:

respond_to do |format|
      # Show a neat html page inside the app's layout for web users
      format.html { render :template => "errors/#{status}", :status => status }

      # Everything else (JSON, XML, YAML, Whatnot) gets a blank page with status
      # which can then be understood and processed by the API client,
      # JavaScript library (on Ajax) etc.
      format.all { render :nothing => true, :status => status }
    end

Если вы хотите создать для него отдельный шаблон, вы можете сделать это и сохранить его в /errors/***.html, а затем отобразить его.

ИЛИ вы можете обработать ошибку на стороне клиента с помощью JavaScript.

...