ActiveHash의 name 출력에서 ​​NoMethodError

5868 단어 초보자Rails
아마 같은 케이스에 빠져있는 분은 조금 생각합니다.
꽤 초보적인 실수였기 때문에
계명도 겸하여 기록합니다.
  • 문제
  • 상황
  • 분석
  • 솔루션

  • 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.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
    
    
    

    이상의 처리에 의해
    무사히 표시가 되었습니다.



    이번은 여기까지입니다.

    읽어 주셔서 감사합니다.

    좋은 웹페이지 즐겨찾기