ActiveHash의 name 출력에서 NoMethodError
꽤 초보적인 실수였기 때문에
계명도 겸하여 기록합니다.
1. 문제
여러 ActiveHash의 이름 표시에서
일부 모델만 NoMethodError입니다.
2. 상황
· users/: id의 경로에서 users # show 액션 호출
・뷰의 항목 중 복수로 ActiveHash를 이용(아래 show.html.erb 참조)
・일부 항목에서는 정상적으로 name이 불린다(아래 터미널 참조)
users/show.html.erb<%= @user.nickname %><br>
---(略)---
<%= @user.sex.name %><br>
<%= @user.character.name %><br>
<%= @user.what_paly.name %><br>
<%= @user.genre.name %><br>
<%= @user.prefecture.name %><br>
<%= @user.active_day.name %><br>
<%= @user.skill.name %><br>
<%= @user.leader_or_member.name %><br>
---(略)---
터미널app/controllers/users_controller.rb:9 UsersController#show:
7: def show
8: @user = User.find(params[:id])
=> 9: binding.pry
10: end
[1] pry(#<UsersController>)> @user.sex.name
NoMethodError: undefined method `sex' for #<User:0x00007fba2d60fbf0>
Did you mean? send
from /Users/okazakiryousuke/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activemodel-6.0.4.1/lib/active_model/attribute_methods.rb:432:in `method_missing'
[2] pry(#<UsersController>)> @user.sex_id
=> 2
[3] pry(#<UsersController>)> @user.active_day.name
=> "火曜日"
3. 분석
여러 ActiveHash 중
잘 표시되는 것과 되지 않는 것이 있는 것 같습니다.
따라서 항목에 따라 개별적으로 존재하는 설정,
ActiveHash 모델
및
User 모델
의 설명이 수상하다고 생각됩니다.
4. 솔루션
어소시에이션의 기술이 잘못되었습니다.
belongs_to 정보
이하와 같이 기술해 버렸습니다.
models/user.rbbelongs_to :active_day, :character, :genre, :leader_or_member, :prefecture,:sex, :skill, :what_play
belongs_to의 모델명은
validates의 열 이름처럼
,
를 사용한 여러 설명은 할 수 없습니다.
이를 위해 첫 번째 열만
어소시에이션이 걸렸습니다.
이것을 수정합니다.
models/user.rbbelongs_to :active_day
belongs_to :character
belongs_to :genre
belongs_to :leader_or_member
belongs_to :prefecture
belongs_to :sex
belongs_to :skill
belongs_to :what_play
이상의 처리에 의해
무사히 표시가 되었습니다.
이번은 여기까지입니다.
읽어 주셔서 감사합니다.
Reference
이 문제에 관하여(ActiveHash의 name 출력에서 NoMethodError), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/RecordProgOR/items/fb4a8ecfa6824f37420d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
· users/: id의 경로에서 users # show 액션 호출
・뷰의 항목 중 복수로 ActiveHash를 이용(아래 show.html.erb 참조)
・일부 항목에서는 정상적으로 name이 불린다(아래 터미널 참조)
users/show.html.erb
<%= @user.nickname %><br>
---(略)---
<%= @user.sex.name %><br>
<%= @user.character.name %><br>
<%= @user.what_paly.name %><br>
<%= @user.genre.name %><br>
<%= @user.prefecture.name %><br>
<%= @user.active_day.name %><br>
<%= @user.skill.name %><br>
<%= @user.leader_or_member.name %><br>
---(略)---
터미널
app/controllers/users_controller.rb:9 UsersController#show:
7: def show
8: @user = User.find(params[:id])
=> 9: binding.pry
10: end
[1] pry(#<UsersController>)> @user.sex.name
NoMethodError: undefined method `sex' for #<User:0x00007fba2d60fbf0>
Did you mean? send
from /Users/okazakiryousuke/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/activemodel-6.0.4.1/lib/active_model/attribute_methods.rb:432:in `method_missing'
[2] pry(#<UsersController>)> @user.sex_id
=> 2
[3] pry(#<UsersController>)> @user.active_day.name
=> "火曜日"
3. 분석
여러 ActiveHash 중
잘 표시되는 것과 되지 않는 것이 있는 것 같습니다.
따라서 항목에 따라 개별적으로 존재하는 설정,
ActiveHash 모델
및
User 모델
의 설명이 수상하다고 생각됩니다.
4. 솔루션
어소시에이션의 기술이 잘못되었습니다.
belongs_to 정보
이하와 같이 기술해 버렸습니다.
models/user.rbbelongs_to :active_day, :character, :genre, :leader_or_member, :prefecture,:sex, :skill, :what_play
belongs_to의 모델명은
validates의 열 이름처럼
,
를 사용한 여러 설명은 할 수 없습니다.
이를 위해 첫 번째 열만
어소시에이션이 걸렸습니다.
이것을 수정합니다.
models/user.rbbelongs_to :active_day
belongs_to :character
belongs_to :genre
belongs_to :leader_or_member
belongs_to :prefecture
belongs_to :sex
belongs_to :skill
belongs_to :what_play
이상의 처리에 의해
무사히 표시가 되었습니다.
이번은 여기까지입니다.
읽어 주셔서 감사합니다.
Reference
이 문제에 관하여(ActiveHash의 name 출력에서 NoMethodError), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/RecordProgOR/items/fb4a8ecfa6824f37420d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
어소시에이션의 기술이 잘못되었습니다.
belongs_to 정보
이하와 같이 기술해 버렸습니다.
models/user.rb
belongs_to :active_day, :character, :genre, :leader_or_member, :prefecture,:sex, :skill, :what_play
belongs_to의 모델명은
validates의 열 이름처럼
,
를 사용한 여러 설명은 할 수 없습니다.
이를 위해 첫 번째 열만
어소시에이션이 걸렸습니다.
이것을 수정합니다.
models/user.rb
belongs_to :active_day
belongs_to :character
belongs_to :genre
belongs_to :leader_or_member
belongs_to :prefecture
belongs_to :sex
belongs_to :skill
belongs_to :what_play
이상의 처리에 의해
무사히 표시가 되었습니다.
이번은 여기까지입니다.
읽어 주셔서 감사합니다.
Reference
이 문제에 관하여(ActiveHash의 name 출력에서 NoMethodError), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/RecordProgOR/items/fb4a8ecfa6824f37420d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)