1

私は Rails 2 アプリを持っています。開発ではすべて正常に動作しますが、実稼働ではビューの 1 つが壊れており、原因を突き止めるのに苦労しています。

開発と本番の唯一の違いは、何らかの理由で開発がmysql2gem を使用し、本番が元のmysqlgem を使用することです。

まず、ログを追跡すると、次のエラーが表示されます。

ActionView::TemplateError (undefined method 'map' for #<Mysql::Result:0xb5ce7844>) on line #15 of app/views/logical_interface/create.rhtml:

15行目は

<%= select_tag 'logical_interface[vlan_id]', options_for_select(@vlan_numbers.map(&:reverse)) %>

コントローラーで次のように定義されています

@pop_id = session[:pop_id]

@vlan_numbers = ActiveRecord::Base.connection.execute("SELECT pop_vlans.id, vlan_number FROM pop_vlans WHERE (pop_id = '" + @pop_id.to_s + "' AND vlan_number = 'Untagged') OR pop_vlans.id NOT IN (SELECT logical_interfaces.vlan_id FROM logical_interfaces) AND pop_id = " + @pop_id.to_s)

@pop_idnil などで失敗しているかどうかを確認しましたが、印刷すると正しい値が表示されます。

15行目を削除して追加すると、すべて<%= @vlan_numbers.inspect %>が追加されます。そうすると、本当に困惑します。#debug @vlan_numbers#<Mysql::Result:0xb5db1298>

mysql2入っていないものがあるかどうかを確認しましたが、一般的に優れmysqlていることがわかりmysql2ました。

何か案は?

アップデート

@vlan_numbers = ActiveRecord::Base.connection.select_all("SELECT pop_vlans.id, vlan_number FROM pop_vlans WHERE (pop_id = '" + @pop_id.to_s + "' AND vlan_number = 'Untagged') OR pop_vlans.id NOT IN (SELECT logical_interfaces.vlan_id FROM logical_interfaces) AND pop_id = " + @pop_id.to_s).collect { |r| r['vlan_number'] }

私のmbratchが示唆したように上記を使用してみました(回答は現在削除されています)がUntagged、リストに追加されたオプションのテキストが逆になり、deggatnU. 選択値にも同じことが起こっていると思います(idテーブルの実際の値ではなく、単なるテキストのように見えます)。

4

2 に答える 2

0

@vlan_numbers は Mysql::Result オブジェクトであり、配列ではないため、このエラーが発生しています。配列を取得する場合は、これを行います

@vlan_numbers = ActiveRecord::Base.connection.select_all("SELECT pop_vlans.id, vlan_number FROM pop_vlans WHERE (pop_id = '" + @pop_id.to_s + "' AND vlan_number = 'Untagged') OR pop_vlans.id NOT IN (SELECT logical_interfaces.vlan_id FROM logical_interfaces) AND pop_id = " + @pop_id.to_s)
于 2013-09-05T14:01:54.660 に答える