ヘルパーを使ってビューからメソッドを実行
ログイン中の場合(クッキーに有効なトークンが設定されている状態)は、再度ログイン画面を表示した際に、ログインフォームを表示せず、○○さんログイン中、と表示するように設定してみました。
Railsチュートリアルに、ヘルパーはRailsのビューに自動的にインクルードされ、ビューからアクセスする事ができると記載されていました。
Railsガイドでは、この当りの記述が見つからず、仕組みがよく分からなかったのでいろいろ試してみました。
●ログインビューを変更
signed_in?メソッドを使って、ログイン中か確認し、表示を切替えます。
<% if signed_in? %>
<%= @user.name %>さんログイン中
<% else %>
<h1>ログイン</h1>
<div class="row">
<%= form_for(:user, url: auth_users_path) do |f| %>
<%= f.label :メールアドレス %>
<%= f.text_field :email %>
<%= f.submit "ログイン", class: "btn btn-large btn-primary" %>
<% end %>
</div>
<% end %>
1)users_helper.rbヘルパーにメソッドを定義
現在、usersコントローラを使用しているので、users_helper.rb内に定義してみました。
$ vi app/helpers/users_helper.rb
def signed_in?
@user = User.find_by(remember_token: cookies[:remember_token])
!@user.nil?
end
end
この定義によって意図した通りに動作しました。
2)app/helpers/ディレクトリ内の他のファイルに定義
試しにtest_helper.rbというファイルを作ってその中に定義してみました。
$ vi app/helpers/test_helper.rb
module TestHelper
def signed_in?
@user = User.find_by(remember_token: cookies[:remember_token])
!@user.nil?
end
end
この設定でも動作しました。特にファイル名やモジュール名は関係なく、このディレクトリ内にあればインクルードされるようです。
3)usersコントローラに定義
usersコントローラ内に同様に定義してみましたが、ビューからコントローラ内のメソッドにはアクセスできないようで"NoMethodError"が発生しました。
| アプリ作成 | 11:07 | comments:0 | trackbacks:0 | TOP↑