質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Q&A

解決済

1回答

928閲覧

【Railsのループ処理】情報を追加する際、2つ目を登録すると1つ目の内容に上書きされないようにするためには?

kazuki0714

総合スコア28

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

0グッド

0クリップ

投稿2019/04/15 09:28

編集2019/04/16 09:50

アパレル向けのRPAを開発しています。

1ユーザーに付き、複数の生地見本を登録する機能を作りたいのですが
2つめの見本を登録すると上書きされて1つしか表示されません。

この場合、2つとも表示されるようにするにはどうすればよろしいでしょうか?
(HTMLやらCSSの汚さは一旦無視していただければ幸いです。まだ初心者レベルを脱していません。。。)

【ここで壁にぶつかってます】
顧客詳細ページの「スワッチを追加」からスワッチページに飛んで登録するとこのページになります。
1つしか登録していないのに同じ内容が4つ表示されています。「スワッチを追加」の下の4つの表です。

また2つめを登録すると1つめが上書きされて、2つめの情報が4つ表示されます。
顧客一覧で4人登録されているので、そうなっているのだと思いますが解決方法が分からず。。。

「スワッチを追加」の下のループ処理 (@posts.each do |post|)がそもそも間違っているのでしょうか?

イメージ説明

Ruby

1# app/views/posts/show.html.erb 2 3<h1> 顧客詳細</h1> 4 5<div class="main posts-show"> 6 <div class="container"> # 顧客情報を登録したら表示される 7 <div class="posts-show-item"> 8 9 <p>会社名:<%= @post.company %></p><br> 10 <p>業態:<%= @post.category %></p><br> 11 <p>お客様名:<%= @post.name %></p><br> 12 <p>担当者:<%= @post.chargeName %></p><br> 13 <p>備考:<%= @post.other %></p><br> 14 <p>名刺:<%= @post.image_name %></p><br> 15 <%= image_tag "/images/#{@post.id}.jpg", :size =>'320x240'%> 16 17 </div> 18 19 <div class="post-menus"> 20 <%= link_to("編集", "/customers/#{@post.id}/edit") %> 21 <%= link_to("削除", "/customers/#{@post.id}/destroy",{method:"post"}) %> 22 23 </div> 24 25 <%= link_to("スワッチを追加", "/customers/#{@post.id}/orders/new") %> 26 27 <div class="container"> #スワッチを登録したら表示される 28 <% @posts.each do |post| %> 29 30 <div class="posts-swatch-item"> 31 <table border="1"> 32 <tr> 33 <th>No</th> 34 <th>Vol</th> 35 <th>品番</th> 36 <th></th> 37 </tr> 38 39 <tr> 40 <td>row-counter</td> 41 <td><%= @post.collection %></td> 42 <td><%= @post.number %></td> 43 <td><%= link_to("詳細", "/customers/#{@post.id}") %></td> 44 </tr> 45 </table> 46 </div> 47 <% end %> 48 49 </div> 50 51 52 </div> 53</div>

上記の画面から「スワッチを追加」を押すと以下の画像ページに飛びます。
このページの登録ボタンを押すと再び詳細ページ(/customers/:id)に戻ります。

イメージ説明

Ruby

1# views/posts/swatch.html.erb 2<%= form_tag("/customers/#{@post.id}/swatch_create",{multipart: true}) do %> 3 4<h1>スワッチ登録</h1> 5<p>以下の顧客のPICKUPスワッチを登録します。</p> 6 7<p>会社名:<%= @post.company %></p><br> 8<p>お客様名:<%= @post.name %></p><br> 9<p>担当者:<%= @post.chargeName %></p><br> 10 11<p> 12 <select name="collection" required> 13 <option value="vol.1">vol.1</option> 14 <option value="vol.2">vol.2</option> 15 <option value="vol.3">vol.3</option> 16 </select> 17</p> 18 19 20<p>登録するコレクションを選んでください</p> 21 22<p>スワッチ1</p> 23 24<input name="number" placeholder="品番を入力してください"><br> 25 26<input name="swatch_note" placeholder="備考"><br> 27 28 29<p><input type="submit" value="登録"></p> 30 31<% end %> 32

routes.rbとposts_controller は以下になります。

Ruby

1#routes.rb 2Rails.application.routes.draw do 3 get '/' => "home#top" 4 get '/customers' => "posts#index" #顧客一覧 5 get '/customers/new' => "posts#new" #顧客登録 6 post '/customers/create' => "posts#create" #登録ボタン押したときのアクション 7 get '/customers/:id/edit' => "posts#edit" #顧客情報編集 8 post '/customers/:id/update' => "posts#update" #更新 9 post "/customers/:id/destroy" => "posts#destroy" #削除 10 11 get '/customers/:id' => "posts#show" #顧客詳細画面 12 get '/customers/:id/orders/new' => "posts#swatch" #スワッチ登録画面 13 post '/customers/:id/swatch_create' => "posts#swatch_create" #登録ボタン押したときのアクション 14

Ruby

1class PostsController < ApplicationController 2 def index 3 @posts = Post.all 4 end 5 6 def new 7 end 8 9 def create 10 @post = Post.new(company: params[:company], category: params[:category], department: params[:department], 11 name: params[:name], chargeName: params[:chargeName], other: params[:other], ) 12 13 @post.save 14 redirect_to("/customers/#{@post.id}") 15 end 16 17 def show 18 @posts = Post.all 19 @post =Post.find_by(id:params[:id]) 20 21 end 22 23 def edit 24 @post = Post.find_by(id:params[:id]) 25 end 26 27 def update 28 @post = Post.find_by(id: params[:id]) 29 @post.company = params[:company] 30 @post.category = params[:category] 31 @post.department = params[:department] 32 @post.name = params[:name] 33 @post.chargeName = params[:chargeName] 34 @post.other = params[:other] 35 36 if params[:image] 37 @post.image_name ="#{@post.id}.jpg" 38 image = params[:image] 39 File.binwrite("public/images/#{@post.id}.jpg", image.read) 40 end 41 42 @post.save 43 redirect_to("/customers") 44 end 45 46 def destroy 47 @post = Post.find_by(id: params[:id]) 48 @post.destroy 49 redirect_to("/customers") 50 end 51 52 def swatch 53 @post = Post.find_by(id:params[:id]) 54 end 55 56 def swatch_create 57 @post = Post.find_by(id: params[:id]) 58 59 @post.collection = params[:collection] 60 @post.swatch_note = params[:swatch_note] 61 @post.number = params[:number] 62 63 @post.save 64 redirect_to("/customers/#{@post.id}") 65 end 66 67 68end 69

アドバイスいただければ幸いです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

同じ内容が表示されてしまうという部分については @posts.each do |post| のブロックで post を参照していないからのように見えます。@post ではなく post を使うようにしてみてください。

投稿2019/04/17 09:24

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kazuki0714

2019/04/25 12:58

ありがとうございます。 @post を post に変更して、マイグレーションファイルに add_reference :swatches, :post, index: true を追加すると表示されるようになりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問