RoRで1つのWebサイトのカートシステムをプログラミングしていますが、カートに奇妙な問題があります。
同じカートモデルで別のアプリを作成しましたが、この問題は発生しませんでした。
だからここに状況があります:
- カートに商品を追加します。大丈夫です。
- cart.total_itemと書いてください、それは大丈夫です。
- cart.total_priceと書くと、これは失敗します。
私のアプリは、 「 cart.total_price」の計算に使用しようとしている「メソッド」が「undefined 」であると教えてくれます。
これが記録です:
/var/rails/caveSACMS/app/views/catalogues/index.html.erbを表示しています。ここで行#196が発生しています。
#<Array:0x00000005ce09f0>の未定義のメソッド `prod_pxuttc'
抽出されたソース(行#196周辺):
193:</ tr> 194:<tr style = "background-color:#2c2c2c;"> 195:<th style = "text-align:center; padding:2px; color:#a2a2a2;"> 196:合計:<%= @ cart.total_price%> 197:</ th> 198:</ tr> 199:<tr style = "background-color:#2c2c2c;">
Rails.root:/ var / rails / myApp
app / models / cart.rb:15:in `block in total_price ' activesupport(3.2.1)lib / active_support / core_ext / enumerable.rb:60:in `map ' activesupport(3.2.1)lib / active_support / core_ext / enumerable.rb:60:in `sum ' app / models / cart.rb:15:in `total_price ' app / views / catalogues / index.html.erb:196:in `_app_views_catalogues_index_html_erb ___ 2685208389527055012_43230480 ' actionpack(3.2.1)lib / action_view / template.rb:143:in `block in render' activesupport(3.2.1)lib / active_support / notification.rb:125:in `instrument ' actionpack(3.2.1)lib / action_view / template.rb:141:in `render ' actionpack(3.2.1)lib / action_view / renderer / template_renderer.rb:41:in `block(2 level)in render_template ' actionpack(3.2.1)lib / action_view / renderer / abstract_renderer.rb:38:in `block in Instrument' activesupport(3.2.1)lib / active_support / Notifications.rb:123:in `block in Instrument' activesupport(3.2.1)lib / active_support / notification / instrumenter.rb:20:in `instrument ' activesupport(3.2.1)lib / active_support / notifys.rb:123:in `instrument ' actionpack(3.2.1)lib / action_view / renderer / abstract_renderer.rb:38:in `instrument ' actionpack(3.2.1)lib / action_view / renderer / template_renderer.rb:40:in `block in render_template ' actionpack(3.2.1)lib / action_view / renderer / template_renderer.rb:48:in `render_with_layout ' actionpack(3.2.1)lib / action_view / renderer / template_renderer.rb:39:in `render_template ' actionpack(3.2.1)lib / action_view / renderer / template_renderer.rb:12:in `render ' actionpack(3.2.1)lib / action_view / renderer / renderer.rb:36:in `render_template ' actionpack(3.2.1)lib / action_view / renderer / renderer.rb:17:in `render ' actionpack(3.2.1)lib / abstract_controller / rendering.rb:109:in `_render_template ' actionpack(3.2.1)lib / action_controller / metal / Streaming.rb:225:in `_render_template ' actionpack(3.2.1)lib / abstract_controller / rendering.rb:103:in `render_to_body ' actionpack(3.2.1)lib / action_controller / metal / renderers.rb:28:in `render_to_body ' actionpack(3.2.1)lib / action_controller / metal / compatibility.rb:50:in `render_to_body ' actionpack(3.2.1)lib / abstract_controller / rendering.rb:88:in `render ' actionpack(3.2.1)lib / action_controller / metal / rendering.rb:16:in `render ' actionpack(3.2.1)lib / action_controller / metal / Instruments.rb:40:in `ブロック(2レベル)のレンダリング' activesupport(3.2.1)lib / active_support / core_ext / branchmark.rb:5:in `block in ms ' /usr/share/ruby-rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/benchmark.rb:310:in `realtime ' activesupport(3.2.1)lib / active_support / core_ext / branchmark.rb:5:in `ms ' actionpack(3.2.1)lib / action_controller / metal / Instruments.rb:40:in `block in render' actionpack(3.2.1)lib / action_controller / metal / Instruments.rb:83:in `cleanup_view_runtime ' activerecord(3.2.1)lib / active_record / railties / controller_runtime.rb:24:in `cleanup_view_runtime ' actionpack(3.2.1)lib / action_controller / metal / Instruments.rb:39:in `render ' actionpack(3.2.1)lib / action_controller / metal / implicit_render.rb:10:in `default_render ' actionpack(3.2.1)lib / action_controller / metal / implicit_render.rb:5:in `send_action ' actionpack(3.2.1)lib / abstract_controller / base.rb:167:in `process_action ' actionpack(3.2.1)lib / action_controller / metal / rendering.rb:10:in `process_action ' actionpack(3.2.1)lib / abstract_controller / callbacks.rb:18:in `block in process_action ' activesupport(3.2.1)lib / active_support / callbacks.rb:414:in `_run__1902602080326961788__process_action__2511143183103068215__callbacks ' activesupport(3.2.1)lib / active_support / callbacks.rb:405:in `__run_callback ' activesupport(3.2.1)lib / active_support / callbacks.rb:385:in `_run_process_action_callbacks ' activesupport(3.2.1)lib / active_support / callbacks.rb:81:in `run_callbacks ' actionpack(3.2.1)lib / abstract_controller / callbacks.rb:17:in `process_action ' actionpack(3.2.1)lib / action_controller / metal / rescue.rb:29:in `process_action ' actionpack(3.2.1)lib / action_controller / metal / Instruments.rb:30:in `block in process_action ' activesupport(3.2.1)lib / active_support / Notifications.rb:123:in `block in Instrument' activesupport(3.2.1)lib / active_support / notification / instrumenter.rb:20:in `instrument ' activesupport(3.2.1)lib / active_support / notifys.rb:123:in `instrument ' actionpack(3.2.1)lib / action_controller / metal / Instruments.rb:29:in `process_action ' actionpack(3.2.1)lib / action_controller / metal / params_wrapper.rb:205:in `process_action ' activerecord(3.2.1)lib / active_record / railties / controller_runtime.rb:18:in `process_action ' actionpack(3.2.1)lib / abstract_controller / base.rb:121:in `process ' actionpack(3.2.1)lib / abstract_controller / rendering.rb:45:in `process ' actionpack(3.2.1)lib / action_controller / metal.rb:203:in `dispatch ' actionpack(3.2.1)lib / action_controller / metal / Rack_delegation.rb:14:in `dispatch ' actionpack(3.2.1)lib / action_controller / metal.rb:246:in `block in action ' actionpack(3.2.1)lib / action_dispatch / routing / route_set.rb:66:in `call ' actionpack(3.2.1)lib / action_dispatch / routing / route_set.rb:66:in `dispatch ' actionpack(3.2.1)lib / action_dispatch / routing / route_set.rb:30:in `call ' ジャーニー(1.0.3)lib / journal / router.rb:68:in `block in call ' 旅(1.0.3)lib / journal / router.rb:56:in `each ' 旅(1.0.3)lib / journal / router.rb:56:in `call ' actionpack(3.2.1)lib / action_dispatch / routing / route_set.rb:589:in `call ' actionpack(3.2.1)lib / action_dispatch / Middleware / best_standards_support.rb:17:in `call ' ラック(1.4.1)lib / Rack / etag.rb:23:in `call ' ラック(1.4.1)lib / Rack / conditionalget.rb:25:in `call ' actionpack(3.2.1)lib / action_dispatch / Middleware / head.rb:14:in `call ' actionpack(3.2.1)lib / action_dispatch / Middleware / params_parser.rb:21:in `call ' actionpack(3.2.1)lib / action_dispatch / Middleware / flash.rb:242:in `call ' ラック(1.4.1)lib / Rack / session / abstract / id.rb:205:in `context ' ラック(1.4.1)lib / Rack / session / abstract / id.rb:200:in `call ' actionpack(3.2.1)lib / action_dispatch / Middleware / Cookies.rb:338:in `call ' activerecord(3.2.1)lib / active_record / query_cache.rb:64:in `call ' activerecord(3.2.1)lib / active_record / connection_adapters / abstract / connection_pool.rb:443:in `call ' actionpack(3.2.1)lib / action_dispatch / Middleware / callbacks.rb:28:in `block in call ' activesupport(3.2.1)lib / active_support / callbacks.rb:405:in `_run__2985483728309837116__call__1908674296767231568__callbacks ' activesupport(3.2.1)lib / active_support / callbacks.rb:405:in `__run_callback ' activesupport(3.2.1)lib / active_support / callbacks.rb:385:in `_run_call_callbacks ' activesupport(3.2.1)lib / active_support / callbacks.rb:81:in `run_callbacks ' actionpack(3.2.1)lib / action_dispatch / Middleware / callbacks.rb:27:in `call ' actionpack(3.2.1)lib / action_dispatch / Middleware / reloader.rb:65:in `call ' actionpack(3.2.1)lib / action_dispatch / Middleware / remote_ip.rb:31:in `call ' actionpack(3.2.1)lib / action_dispatch / Middleware / debug_exceptions.rb:16:in `call ' actionpack(3.2.1)lib / action_dispatch / Middleware / show_exceptions.rb:56:in `call ' railties(3.2.1)lib / rails / Rack / logger.rb:26:in `call_app ' railties(3.2.1)lib / rails / Rack / logger.rb:16:in `call ' actionpack(3.2.1)lib / action_dispatch / Middleware / request_id.rb:22:in `call ' ラック(1.4.1)lib / Rack / methodoverride.rb:21:in `call ' ラック(1.4.1)lib / Rack / runtime.rb:17:in `call ' activesupport(3.2.1)lib / active_support / cache /strategy / local_cache.rb:72:in `call ' ラック(1.4.1)lib / Rack / lock.rb:15:in `call ' actionpack(3.2.1)lib / action_dispatch / Middleware / static.rb:53:in `call ' railties(3.2.1)lib / rails / engine.rb:479:in `call ' railties(3.2.1)lib / rails / application.rb:220:in `call ' ラック(1.4.1)lib / Rack / content_length.rb:14:in `call ' railties(3.2.1)lib / rails / Rack / log_tailer.rb:14:in `call ' ラック(1.4.1)lib / Rack / handler / webrick.rb:59:in `service ' /usr/share/ruby-rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/webrick/httpserver.rb:111:in `service ' /usr/share/ruby-rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/webrick/httpserver.rb:70:in `run ' /usr/share/ruby-rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/webrick/server.rb:183:in `block in start_thread '
リクエスト
パラメーター:
{"地域"=>"2"、 "categorie" => "-1"、 "millesim" => "-1"、 "price_from" => ""、 "price_to" => "-1"、 "cart_action" => "-1"、 "to_add" => "-1"、 "show_cart" => "-1"}
セッションダンプを表示
_csrf_token: "kDD3qIZpvZInGWKclqSUQoyraIkcs20VKbhBMBZezJ4 =" カート:#<Cart:0x00000005ce0a68 @ items = [[#<CsaV3Prd prod_wid:6024、prod_cid:907509、prod_pxuttc:#<BigDecimal:5ce07e8、 '0.36E2'、9(18)>>]]、@ total_price = 0> session_id: "7efaefcb7af5aa99d68c7466c1e7ee4c"
私のコントローラーには、必要に応じてカート「初期化」があります。
クラスCataloguesController<ApplicationController defインデックス @cart = find_cart @items = @ cart.items 終わり 終わり
これが私のカートモデルです:
クラスカート attr_reader:items def initialize @items = [] @total_price = 0 終わり def add_product(product) @items << product 製品 終わり def total_price @ items.sum {| item | item.prod_pxuttc} 終わり def total_items @ items.length 終わり 終わり
このアプリでアクション「合計_価格」が機能しない理由がわかりません。私の他のアプリは同じモデルで正常に動作します。
2つのアプリの唯一の違いは次のとおりです。
- Not-Workingアプリでは、アイテム価格の列は「decimal(10,2)」タイプです。
- Workingアプリでは、アイテム価格の列は「int(11)」タイプです。
そして、最も奇妙なことは、テーブルの列'*prod_pxuttc*'を並べ替えてリストにレンダリングできることです。値をレンダリングします。
テーブルから同じ値を並べ替える2つの異なる順序は次のとおりです。
- 最初の方法(値の処理とレンダリング):(この順序で多くのアイテムが並べ替えられます)
@prod = CsaV3Prd.find(:all、{:conditions => ["prod_cat =?"、 "#{params [:categorie]}"]、:order => "prod_cid DESC"})
- 2番目の方法(機能せず、エラーを呼び出すカートメソッド):(この注文は1つの一意のアイテムを並べ替えます)
product = CsaV3Prd.find(:all、{:select => ["prod_wid、prod_cid、prod_pxuttc"]、:conditions => ["prod_cid =?"、 "#{params [:to_add]}"]、:order = > "prod_cid DESC"})
誰かが問題を解決する方法を知っている場合、またはこの問題のスレッドがすでにある場合(私は検索しましたが見つかりませんでした)、教えてください。
ありがとう。
2012年5月29日編集
解決済み
したがって、問題はアレイの選択に関するものでした。
カートに入れるアイテムを1つ選択するだけで、すべてが機能します。
パラメータ':all'を':first'に置き換えました。
答えてくれたFrederickCheungに感謝します。