ヘルパーを使ってビューからメソッドを実行 Ruby on RailsでWebサイト公開!に挑戦中
FC2ブログ

Ruby on RailsでWebサイト公開!に挑戦中

レンタルサーバーでWebサイトを公開すべく、Ruby on Railaの勉強をする日々を語ります。

PREV | PAGE-SELECT | NEXT

≫ EDIT

ヘルパーを使ってビューからメソッドを実行

ログイン中の場合(クッキーに有効なトークンが設定されている状態)は、再度ログイン画面を表示した際に、ログインフォームを表示せず、○○さんログイン中、と表示するように設定してみました。



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↑

COMMENT















非公開コメント

TRACKBACK URL

http://hbnist76.blog.fc2.com/tb.php/506-225c979a

TRACKBACK

PREV | PAGE-SELECT | NEXT