teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

順序修正

2016/09/28 06:00

投稿

退会済みユーザー
answer CHANGED
@@ -15,4 +15,5 @@
15
15
  うまく読み込めない理由はおそらくインスタンスからアクセスしてないからです。質問者様の例だとmoduleからimportされた関数はインスタンスメソッドとして定義されます。
16
16
  controllerなどでfull_name(user)としていないでしょうか?
17
17
  この宣言の仕方の場合`user.full_name(user)`でアクセスする必要があり,結局のところ,インスタンスメソッドとしてincludeした場合userインスタンスを使うので,モジュールに切り出す必要性はなくモデルに定義するので十分ということになります。full_nameはメソッドの中で引数userをreciever(インスタンスメソッドの呼び出し元にするインスタンス)にしているので,必ずそのuserのインスタンスを取得できる状態になっているため,関数を切り分けてincludeする理由はモデルのファイルが肥大化した時くらいだと思います。
18
- でなければAdmin::UsersHelperの定義が他に存在して上書きされている(今回は前者だと思いますがわりとよくある原因です)ことが考えられます。
18
+ また上記が原因でなければAdmin::UsersHelperの定義が他に存在して上書きされている(今回は上記の原因だと思いますがわりとよくある原因です)ことが考えられます。
19
+ もしくは,railsのパスが読み込まれていない階層にファイルを置いている可能性もあります。

2

編集

2016/09/28 06:00

投稿

退会済みユーザー
answer CHANGED
@@ -14,5 +14,5 @@
14
14
  ```
15
15
  うまく読み込めない理由はおそらくインスタンスからアクセスしてないからです。質問者様の例だとmoduleからimportされた関数はインスタンスメソッドとして定義されます。
16
16
  controllerなどでfull_name(user)としていないでしょうか?
17
- この宣言の仕方の場合`user.full_name(user)`でアクセスする必要があり,結局のところ,インスタンスメソッドとしてincludeした場合userインスタンスを使うので,モジュールに切り出す必要性はなくモデルに定義するので十分ということになります。userをreciever(インスタンスとして引数)にしているので,必ずそのuserのインスタンスを取得できる状態になっているため,関数を切り分けてincludeする理由はモデルのファイルが肥大化した時くらいだと思います。
17
+ この宣言の仕方の場合`user.full_name(user)`でアクセスする必要があり,結局のところ,インスタンスメソッドとしてincludeした場合userインスタンスを使うので,モジュールに切り出す必要性はなくモデルに定義するので十分ということになります。full_nameはメソッドの中で引数userをreciever(インスタンスメソッド呼び出し元にするインスタンス)にしているので,必ずそのuserのインスタンスを取得できる状態になっているため,関数を切り分けてincludeする理由はモデルのファイルが肥大化した時くらいだと思います。
18
18
  でなければAdmin::UsersHelperの定義が他に存在して上書きされている(今回は前者だと思いますがわりとよくある原因です)ことが考えられます。

1

文脈が変なところを修正

2016/09/28 05:58

投稿

退会済みユーザー
answer CHANGED
@@ -3,7 +3,7 @@
3
3
  self.class.helpers.ヘルパーメソッド名
4
4
  ```
5
5
  上記を使えば一応どこからでも呼び出せますが,modelと関係ないロジックかつ他のmodelでも使いまわしたいメソッドなどは,concernという階層を作ってそこにmoduleを作るのが一般的です。
6
- ですが,今回のメソッドはUserモデルのパラメータを利用しているので,modelと関係あるロジックなのでUserモデルの中にfullnameメソッドを書くのが普通だと思います。
6
+ ですが,今回のメソッドはUserモデルのパラメータを利用しており,modelと関係あるロジックなのでUserモデルの中にfullnameメソッドを書くのが普通だと思います。
7
7
  ```ruby
8
8
 
9
9
  class User < ActiveRecord::Base
@@ -13,5 +13,6 @@
13
13
  end
14
14
  ```
15
15
  うまく読み込めない理由はおそらくインスタンスからアクセスしてないからです。質問者様の例だとmoduleからimportされた関数はインスタンスメソッドとして定義されます。
16
- controllerなどでfull_name(user)としていないでしょうか?この宣言の場合`user.full_name(user)`でアクセスする必要があり,結局のところ,インスタンスメソッドとしてincludeした場合userインスタンスを使うので,モジュールに切り出す必要性はなくモデルに定義するので十分ということになります。userをreciever(インスタンスとしての引数)にしているので,必ずそのuserのインスタンスを取得できる状態になっているため,関数を切り分けてincludeする理由はモデルのファイルが肥大化した時くらいだと思います。
16
+ controllerなどでfull_name(user)としていないでしょうか?
17
+ この宣言の仕方の場合`user.full_name(user)`でアクセスする必要があり,結局のところ,インスタンスメソッドとしてincludeした場合userインスタンスを使うので,モジュールに切り出す必要性はなくモデルに定義するので十分ということになります。userをreciever(インスタンスとしての引数)にしているので,必ずそのuserのインスタンスを取得できる状態になっているため,関数を切り分けてincludeする理由はモデルのファイルが肥大化した時くらいだと思います。
17
18
  でなければAdmin::UsersHelperの定義が他に存在して上書きされている(今回は前者だと思いますがわりとよくある原因です)ことが考えられます。