回答編集履歴
3
順序修正
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
編集
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(インスタンス
|
17
|
+
この宣言の仕方の場合`user.full_name(user)`でアクセスする必要があり,結局のところ,インスタンスメソッドとしてincludeした場合userインスタンスを使うので,モジュールに切り出す必要性はなくモデルに定義するので十分ということになります。full_nameはメソッドの中で引数userをreciever(インスタンスメソッドの呼び出し元にするインスタンス)にしているので,必ずそのuserのインスタンスを取得できる状態になっているため,関数を切り分けてincludeする理由はモデルのファイルが肥大化した時くらいだと思います。
|
18
18
|
でなければAdmin::UsersHelperの定義が他に存在して上書きされている(今回は前者だと思いますがわりとよくある原因です)ことが考えられます。
|
1
文脈が変なところを修正
answer
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
self.class.helpers.ヘルパーメソッド名
|
4
4
|
```
|
5
5
|
上記を使えば一応どこからでも呼び出せますが,modelと関係ないロジックかつ他のmodelでも使いまわしたいメソッドなどは,concernという階層を作ってそこにmoduleを作るのが一般的です。
|
6
|
-
ですが,今回のメソッドはUserモデルのパラメータを利用して
|
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)としていないでしょうか?
|
16
|
+
controllerなどでfull_name(user)としていないでしょうか?
|
17
|
+
この宣言の仕方の場合`user.full_name(user)`でアクセスする必要があり,結局のところ,インスタンスメソッドとしてincludeした場合userインスタンスを使うので,モジュールに切り出す必要性はなくモデルに定義するので十分ということになります。userをreciever(インスタンスとしての引数)にしているので,必ずそのuserのインスタンスを取得できる状態になっているため,関数を切り分けてincludeする理由はモデルのファイルが肥大化した時くらいだと思います。
|
17
18
|
でなければAdmin::UsersHelperの定義が他に存在して上書きされている(今回は前者だと思いますがわりとよくある原因です)ことが考えられます。
|