MIZOGUCHIKoki / MusicScoreManagementApp

高知工科大学 2023年度 ソフトウェア工学
0 stars 0 forks source link

home Viewエラー #50

Closed MikamiShu closed 9 months ago

MikamiShu commented 9 months ago

一般ユーザでログインした直後です.

<原因> おそらくhomeアクションでの画像の部分でスコープを通っていないためNilであると言っているのかと思います.

<原因と思われる画面>

スクリーンショット 2023-12-19 17 02 44

<エラー画面>

スクリーンショット 2023-12-19 17 05 11

原因が絞れました.

UsersController#home@scoresがNillであることが原因です.

MIZOGUCHIKoki commented 9 months ago

デバッグ用

VIEWの方では,@scoresがNillの時,表示しない設定を加えました( https://github.com/MIZOGUCHIKoki/MusicScoreManagementApp/pull/33/commits/0a927f19562ddbb2a973ee48eca4c172e6b950a5 ).検索に引っかからないとき,@scores=nillになると思うので.(本来はNillにならないから,デバッグ用)

MIZOGUCHIKoki commented 9 months ago

デバッグ用

デバッグするときに,コードをこのように書き換えてください.

app/views/home.html.erb

- <% if @scores.any? %>
+ <% if @scores.present? && @scores.any? %> 
      <ol>
        <% @scores.each do |score|%>
          <li>
            <%= link_to score.name, score%> | 
            <%= score.created_at %>
          </li>
        <% end %>
      </ol>
    <% end %>
MIZOGUCHIKoki commented 9 months ago

デバッグ用

このようにすると,一応先に進みます.

app/controllers/users_controller.rb

def home
    # if params[:input_value] == :order
    @user = User.find(params[:id]) # ユーザ特定
    # order = if params[:order] == 'asc' # 昇順
    #           :grate_sort_asc
    #         elsif params[:order] == 'desc' # 降順
    #           :grate_sort_desc
    #         else
    #           :all
    #         end
    # @scores = @user.scores.send(order) # ソート結果格納
    @scores = @user.scores.all
    # elsif params[:input_value] == :name || params[:input_value] == :composer || params[:input_value] == :arranger
    #   @search_params = score_search_params
    #   @scores = score_search(@search_params)
    # elsif !params[:use_gakki].nil?
    #   @search_params = score_search_gakki_params
    #   @scores = score_search_gakki(@search_params)
    # end
  end

app/views/user/home.html.erb

-<div class="hide-and-seek">
-      <%= form_with model: @scores do |form| %>
-        <%= form.check_box :use_gakki, {multiple: true} %>piccolo
-        <%= form.check_box :use_gakki, {multiple: true} %>c_flute
-        <%= form.check_box :use_gakki, {multiple: true} %>oboe
-        <%= form.check_box :use_gakki, {multiple: true} %>english_horn
-        <%= form.check_box :use_gakki, {multiple: true} %>e_clarinet
-        <%= form.check_box :use_gakki, {multiple: true} %>b_clarinet
-        <%= form.check_box :use_gakki, {multiple: true} %>b_bass_clarinet
-        <%= form.check_box :use_gakki, {multiple: true} %>bassoon
-        <%= form.check_box :use_gakki, {multiple: true} %>e_alto_saxophone
-        <%= form.check_box :use_gakki, {multiple: true} %>b_tenor_saxophone
-        <%= form.check_box :use_gakki, {multiple: true} %>b_baritone_saxophone
-        <%= form.check_box :use_gakki, {multiple: true} %>b_trumpet
-        <%= form.check_box :use_gakki, {multiple: true} %>f_horn
-        <%= form.check_box :use_gakki, {multiple: true} %>trombone
-        <%= form.check_box :use_gakki, {multiple: true} %>eb
-        <%= form.check_box :use_gakki, {multiple: true} %>euphonium
-        <%= form.check_box :use_gakki, {multiple: true} %>tuba
-        <%= form.check_box :use_gakki, {multiple: true} %>string_bass
-        <%= form.check_box :use_gakki, {multiple: true} %>piano
-        <%= form.check_box :use_gakki, {multiple: true} %>harp
-        <%= form.check_box :use_gakki, {multiple: true} %>timpani
-        <%= form.check_box :use_gakki, {multiple: true} %>drums
-        <%= form.check_box :use_gakki, {multiple: true} %>percussion
-      <% end %>
-    </div>
1250385-Yamamoto commented 9 months ago

おそらくこれで通ると思います。 変更点は、form_with@scoresを参照せずに do |form|としたことと、 その次の行の div class field の2点です。

<input type="checkbox" id="hide">
    <label class="hide" for="hide">使用楽器</label>
    <div class="hide-and-seek">
    <%= form_with do |form| %>
      <div class="field">
        <%= form.label :use_gakki %>
        <%= form.check_box :use_gakki, {multiple: true} %>piccolo
        <%= form.check_box :use_gakki, {multiple: true} %>c_flute
        <%= form.check_box :use_gakki, {multiple: true} %>oboe
        <%= form.check_box :use_gakki, {multiple: true} %>english_horn
        <%= form.check_box :use_gakki, {multiple: true} %>e_clarinet
        <%= form.check_box :use_gakki, {multiple: true} %>b_clarinet
        <%= form.check_box :use_gakki, {multiple: true} %>b_bass_clarinet
        <%= form.check_box :use_gakki, {multiple: true} %>bassoon
        <%= form.check_box :use_gakki, {multiple: true} %>e_alto_saxophone
        <%= form.check_box :use_gakki, {multiple: true} %>b_tenor_saxophone
        <%= form.check_box :use_gakki, {multiple: true} %>b_baritone_saxophone
        <%= form.check_box :use_gakki, {multiple: true} %>b_trumpet
        <%= form.check_box :use_gakki, {multiple: true} %>f_horn
        <%= form.check_box :use_gakki, {multiple: true} %>trombone
        <%= form.check_box :use_gakki, {multiple: true} %>eb
        <%= form.check_box :use_gakki, {multiple: true} %>euphonium
        <%= form.check_box :use_gakki, {multiple: true} %>tuba
        <%= form.check_box :use_gakki, {multiple: true} %>string_bass
        <%= form.check_box :use_gakki, {multiple: true} %>piano
        <%= form.check_box :use_gakki, {multiple: true} %>harp
        <%= form.check_box :use_gakki, {multiple: true} %>timpani
        <%= form.check_box :use_gakki, {multiple: true} %>drums
        <%= form.check_box :use_gakki, {multiple: true} %>percussion
      </div>
    <% end %>
1250385-Yamamoto commented 9 months ago

上記に加えて <% if @scores.any? %>を <% if @scores.present? && @scores.any? %>に変更すると楽譜登録画面が表示されました

MIZOGUCHIKoki commented 9 months ago

@tanakaryo341 @1250352 へ引継ぎます.

1250385-Yamamoto commented 9 months ago

エラーが解消されましたので issues を閉じます