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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

8857閲覧

ヘルパーで定義したアクションの呼び出し

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2016/04/07 08:32

ヘルパーで定義したアクションの呼び出したいです。
helpersのusers_helper.rbで定義したimage_for(user)アクションを呼び出したいです。

ruby

1module UsersHelper 2 def image_for(user)←ここのアクション 3 if user.image 4 image_tag "/user_images/#{user.image}", class: "profile_img" 5 else 6 "background: #ccc" 7 end 8 end 9end

home_controller.rbで呼び出したいのですが、
NoMethodError in Home#top
undefined method `image' for nil:NilClass とエラーが出てしまいました。

ruby

1class HomeController < ApplicationController 2 def top 3 if user_signed_in? 4 # 変数@noteにNoteクラスのインスタンスを代入してください 5 @note = Note.new 6 # 変数@notesにNoteクラスのインスタンスの配列を降順で代入してください 7 @notes = Note.all.order(created_at: :desc) 8 render template: "users/show" 9 @users = User.all 10 else 11 @message = "ようこそKotoritterへ!" 12 end 13 end 14 15 def about 16 end 17 18 def timeline 19 @timeline=Timeline.all 20 end 21end 22

とhome_controller.rbに記述したのですが、
ヘルパーで定義したアクションの呼び出し方が分からないです。
showファイル内のusers.html.erを呼び出せば、ヘルパーで定義したものもよびだせると思っていましたが、間違っていますか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

helperメソッドは基本Viewで使うものです。
なのでControllerから呼ぶときは専用の文法を使う必要があります。

また,アクションとメソッドは区別があるので,ControllerのURLに対して呼び出されるメソッドを特にアクションと呼んだ方がいいと思います。アクション内で呼ばれるものはメソッドと呼んだ方がいいでしょう。

helperメソッドを特にアクションとして呼びたい場合は,

ruby

1#home_controller.rb 2def image_for(user) 3 view_context.image_for(user) 4end

などとするといいと思います。

投稿2016/04/07 08:44

編集2016/04/07 08:45
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ControllerでHeplerをinclude することでHelperのメソッドをControllerでも使うことが出来ます。

ruby

1##app/helpers/hoge_helper.rb 2module HogeHelper 3 def fuga 4 puts "fuga!" 5 end 6end 7 8##app/controllers/hoge_controller.rb 9class HogeController < ApplicationController 10 include HogeHelper 11 def index 12 fuga #=> "fuga!" 13 end 14end

投稿2016/04/07 08:39

編集2016/04/07 09:05
ShoheiUyama

総合スコア206

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問