現状、動作そのものはできております。ただ、タイトル内の問題を解決しつつ、冗長すぎる既存コードを書き換えたいと考えています。既存コードは下記の通りです。
#users_controller
ruby
1@user = User.find_by(id: params[:id]) 2@post1 = Post.find_by(user_id: @user.id, number: 1, rank: 1) 3@post2 = Post.find_by(user_id: @user.id, number: 2, rank: 1) 4@post3 = Post.find_by(user_id: @user.id, number: 3, rank: 1)
#show.html
ruby
1<h4 id="list-item-1"><%= @post1.name %></h4> 2 <%= render 'form1', user: @user %> 3<h4 id="list-item-2"><%= @post2.name %></h4> 4 <%= render 'form2', user: @user %> 5<h4 id="list-item-3"><%= @post3.name %></h4> 6 <%= render 'form3', user: @user %>
#_form1.html.erb(同様に_form2と_form3が存在、違いはコード内の下記一文の数字部分だけ)
ruby
1..... 2<% if post.number == 1 %> 3.....
#解決したい方向性(numberが10まで増えても対応可能なように)
1: users_controller内の繰り返し処理をうまくやりたい(現状だと、仮にnumber:3該当分がnilだとエラーになってしまう)
2: _form#.html.erbのファイル数が増えないよう、一つのファイル内におさめたい
繰り返し処理に関する、初歩的な質問になっていると思いますが、ご教示いただけますと幸いです。どうぞよろしくお願いいたします。
たとえば次のコードは動作しますか? : Post.where(user_id: @user.id, number: [1, 2, 3], rank: 1)
コメントありがとうございます。 今回の処理でwhereメソッドを試した時、undefined method `name' for #<Post::ActiveRecord_Relation:乱数>などのエラーがいつも表示されるため、既存コードでもfind_byを使っておりました。ご教示いただいたコードでも改めてトライしてみましたが、同じようなエラーとなってしまいました。 なお、whereメソッドは他の処理部分で用いたりしておりますが、うまくいく時と、色々試行錯誤しても同様のエラーが改善せずに使うのを諦めたことがございます。