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

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

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

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

Ruby on Rails

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

2111閲覧

Railsでsessionの中身を取り出せない

anvinon

総合スコア38

Ruby

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

Ruby on Rails

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2017/04/07 06:13

###開発環境

  • MacOS X 10.11 El Capitan
  • Ruby 2.3.1
  • Ruby on Rails 4.2.6

###発生している問題・エラーメッセージ
ECサイトを作っています。Railsでセッションにデータを入れて、ビューで取り出すとビューに余計な枠が混じってしまうので、その部分だけ消したいです。状況は以下の画像のとおりです。
余計な枠が混じっている
ソースは下記のとおりです。

html

1<!DOCTYPE html> 2<html> 3<head> 4 <title>Slup</title> 5 <link rel="stylesheet" media="all" href="/assets/carts-539b1b2d248fcacaf845c897cae976a6.css?body=1" data-turbolinks-track="true" /> 6<link rel="stylesheet" media="all" href="/assets/details-539b1b2d248fcacaf845c897cae976a6.css?body=1" data-turbolinks-track="true" /> 7<link rel="stylesheet" media="all" href="/assets/home-539b1b2d248fcacaf845c897cae976a6.css?body=1" data-turbolinks-track="true" /> 8<link rel="stylesheet" media="all" href="/assets/products-539b1b2d248fcacaf845c897cae976a6.css?body=1" data-turbolinks-track="true" /> 9<link rel="stylesheet" media="all" href="/assets/application-2e9d1cb72084fa4225b20f531bad849f.css?body=1" data-turbolinks-track="true" /> 10 <script src="/assets/jquery-24e9e31ece1989ef3791bcd53ea38cab.js?body=1" data-turbolinks-track="true"></script> 11<script src="/assets/jquery_ujs-e9c99e4aa7db66a7f23b948d7d043bd8.js?body=1" data-turbolinks-track="true"></script> 12<script src="/assets/turbolinks-95919f04de70dd97e4a820144b05e4c0.js?body=1" data-turbolinks-track="true"></script> 13<script src="/assets/carts-f6c6ef02137813db1b2df8e2c31983a1.js?body=1" data-turbolinks-track="true"></script> 14<script src="/assets/details-f6c6ef02137813db1b2df8e2c31983a1.js?body=1" data-turbolinks-track="true"></script> 15<script src="/assets/home-f6c6ef02137813db1b2df8e2c31983a1.js?body=1" data-turbolinks-track="true"></script> 16<script src="/assets/products-f6c6ef02137813db1b2df8e2c31983a1.js?body=1" data-turbolinks-track="true"></script> 17<script src="/assets/application-e4664d6559033263dddf18520aca44be.js?body=1" data-turbolinks-track="true"></script> 18 <meta name="csrf-param" content="authenticity_token" /> 19<meta name="csrf-token" content="AIlS+RmQE7is3wczlmALb4NyzVCa12ylGwDUl75H9nbpeWsUmoCiWQqnvTddAvyM/Ha4yykqOA5RDbq2zqdbbg==" /> 20</head> 21<body> 22 <header> 23 <nav> 24 <!-- user_signed_in? はユーザがログインしているか調べるdeviseのHelperメソッド --> 25 <!-- current_user は現在ログインしているUserオブジェクトを返すdeviseのHelperメソッド --> 26 <!-- *_path はUserモデルを作成したときに、 27 deviseにより自動で作成されてますので、rake routesで確認できます --> 28 Logged in as <strong>test@example.com</strong>. 29 <a href="/users/edit">プロフィール変更</a> | 30 <a rel="nofollow" data-method="delete" href="/users/sign_out">ログアウト</a> 31 </nav> 32 </header> 33 34 <p class="notice"></p> 35 <p class="alert"></p> 36 37<h1>カートの中身</h1> 38 39<table border="1"> 40 <tr> 41 <td>商品番号</td> 42 <td>値段</td> 43 <td>商品説明</td> 44 <td>画像</td> 45 <td>個数</td> 46 </tr> 47 <tr> 48 <td>16</td> 49 <td>300</td> 50 <td>赤い時計</td> 51 <td><a href="/products/16"><img src="https://anvinon.s3.amazonaws.com/uploads/product/image/16/watch004.png" alt="Watch004" /></a> </td> 52 <td>5</td> 53 </tr> 54 <tr> 55 <td></td> 56 <td></td> 57 <td></td> 58 <td><a href="/products/16"><img src="https://anvinon.s3.amazonaws.com/uploads/product/image/16/watch004.png" alt="Watch004" /></a> </td> 59 <td></td> 60 </tr> 61</table> 62 63 64 65 <footer> 66 <a href="/">トップに戻る</a> 67 </footer> 68</body> 69</html> 70

ビューで取り出すまでの流れは下記のとおりです。

  1. showアクションとaddアクションでsession[:cart]にデータを入れる。

showは商品詳細です。addは買い物カートへの商品追加です。contentは買い物カートの中身です。

ruby

1# app/controllers/products_controller.rb 2 3 def show 4 @product = Product.find(params[:id]) 5 session[:cart] ||= {} 6 session[:cart]["#{params[:id]}"] = Product.find(params[:id]) 7 end 8 9 def add 10 session[:cart]["#{params[:id]}_item"] = params[:item] 11 end 12 13 def content 14 end

2.contentでデータを表示させます。

html

1# app/views/products/content.html.erb 2 3<h1>カートの中身</h1> 4 5<table border="1"> 6 <tr> 7 <td>商品番号</td> 8 <td>値段</td> 9 <td>商品説明</td> 10 <td>画像</td> 11 <td>個数</td> 12 </tr> 13 <% session[:cart].each do |key, value| %> 14 <tr> 15 <td><%= session[:cart]["#{key}"]["id"] %></td> 16 <td><%= session[:cart]["#{key}"]["price"] %></td> 17 <td><%= session[:cart]["#{key}"]["description"] %></td> 18 <td><%= link_to image_tag(Product.find("#{key}").image.url), { :controller => :products, :action => :show, :id => Product.find("#{key}").id }%> </td> 19 <td><%= session[:cart]["#{key}_item"] %></td> 20 </tr> 21 <% end %> 22</table>

最後に、contentアクションにbinding.pryを入れたときのセッションの中身は下記のとおりです。

ruby

1From: /Users/anvinon/projects/slup/app/controllers/products_controller.rb @ line 29 ProductsController#content: 2 3 28: def content 4 => 29: binding.pry 5 30: end 6 7[1] pry(#<ProductsController>)> session[:cart] 8=> {"16"=> 9 {"id"=>16, 10 "price"=>300, 11 "description"=>"赤い時計", 12 "created_at"=>"2017-03-28T21:47:51.065Z", 13 "updated_at"=>"2017-03-28T21:47:51.065Z", 14 "image"=>{"url"=>"https://anvinon.s3.amazonaws.com/uploads/product/image/16/watch004.png"}, 15 "quantity"=>nil}, 16 "16_item"=>"5"} 17

以上ですが、何故余計な枠(行)が混じってしまうのかわかりません。
ご教示ください。よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ruby

1=> {"16"=> 2 {"id"=>16, 3 "price"=>300, 4 "description"=>"赤い時計", 5 "created_at"=>"2017-03-28T21:47:51.065Z", 6 "updated_at"=>"2017-03-28T21:47:51.065Z", 7 "image"=>{"url"=>"https://anvinon.s3.amazonaws.com/uploads/product/image/16/watch004.png"}, 8 "quantity"=>nil}, 9 "16_item"=>"5"}

というように、セッション内には「16」と「16_item」の2つが入っています。そのままループさせれば、「16_item」のほうも無理やり出力しようとしてしまいます。

投稿2017/04/07 06:36

maisumakun

総合スコア145121

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

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

anvinon

2017/04/07 06:39

ご回答有り難うございます。 「16_item」にはカートに入っている数量を入れているつもりだったのですが(この場合は、5個)、セッションの形(とでも言うのでしょうか)を見直すしかないのでしょうか?
maisumakun

2017/04/07 06:41

そうですね、別に入れたほうがいいかもしれません。
anvinon

2017/04/07 06:42

わかりました、もう少し設計を見直してみます。ありがとうございました!ベストアンサーに選ばせて頂きます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問