2

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に感謝します。

4

1 に答える 1

0
product = CsaV3Prd.find(:all,{:select=>["prod_wid, prod_cid, prod_pxuttc"],:conditions=>["prod_cid = ?","#{params[:to_add]}"],:order=>"prod_cid DESC"})

単一の積ではなく、配列 (おそらく 1 つの要素を含む) を返します。find :first1点のみご希望の場合にご利用ください。

これは、提供したセッションのダンプからも確認できます。ここで、 @items は配列の配列であることがわかります ( [[ ? で始まる方法を参照してください)。

あなたの問題とは関係ありませんが、

:select=>["prod_wid, prod_cid, prod_pxuttc"]

作業はおそらく事故です(Array#to_sが行うことによる)。おそらくやるべきことは

:select=>"prod_wid, prod_cid, prod_pxuttc"
于 2012-05-25T12:13:46.620 に答える