質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

3708閲覧

【rails 】controllerでエラー処理をした後、renderでテンプレ表示。jsが読み込まれない・・・。

gogoackman3

総合スコア109

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2016/09/29 02:47

以下のようなログインに関するアクションをsessions controllerに書いています。

new:ログインフォーム画面
create:ログイン処理

ruby

1 def new 2 end 3 4 def create 5 user = User.find_by(email: params[:session][:email].downcase) 6 if user && user.authenticate(params[:session][:password]) 7 log_in user 8 remember user 9 flash[:success] = 'ログインしました。' 10 redirect_back_or root_url 11 else 12 flash.now[:danger] = 'メールアドレスまたはパスワードが正しくありません。' 13 render 'new' 14 end 15 end

ここでログイン処理に失敗した処理で、render'new'をした後に、newのログインフォーム画面に戻りますが、その場合に限り、jsが読み込まれません。
(逆に最初にログインフォーム画面にアクセスした時は読み込まれています。)

全画面共通テンプレのapplication.html.slimでは以下のようにアクション毎にjsを読み込ませています。(下記の通り、全てで共通のjsはその前に直接includeしています。)

html

1 ・・ 2 ・・ 3 = javascript_include_tag 'application' 4 = render "#{controller.controller_name}/head_#{controller.action_name}" rescue nil

対応するjsを読み込むファイルは、
views/sessions/の中に以下のように置いています。

_head_new.html.slim

html

1= javascript_include_tag 'js/flash'

※jsはassets/jacascripts/js/に置かれているので、パス自体はあっています。

initializersのassets.rbにも以下のように記載し、プリコンパイルしています。

ruby

1Rails.application.config.assets.precompile += %w( *.js )

なぜ、renderでログインフォーム画面を描画する時だけ、application.html.slimの以下のrenderがうまく走らないのでしょうか?

html

1 = render "#{controller.controller_name}/head_#{controller.action_name}" rescue nil

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ruby

1 = render "#{controller.controller_name}/head_#{controller.action_name}" rescue nil

このコードだと、createアクションでnewrenderした時はaction_namecreateなので、 

ruby

1= render "sessions/head_create" rescue nil

と同じ意味になります。

rendernewアクションのテンプレート(new.html.slim)をrenderしているだけなので、action_namecreateのままなのです。

投稿2016/10/21 16:00

cameluby

総合スコア891

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gogoackman3

2016/10/21 16:07

なるほどーよく分かりました! そう考えると、この実装自体微妙な気がしてきました・・・。笑
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問