私は Rails 2 アプリを持っています。開発ではすべて正常に動作しますが、実稼働ではビューの 1 つが壊れており、原因を突き止めるのに苦労しています。
開発と本番の唯一の違いは、何らかの理由で開発がmysql2
gem を使用し、本番が元のmysql
gem を使用することです。
まず、ログを追跡すると、次のエラーが表示されます。
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_id
nil などで失敗しているかどうかを確認しましたが、印刷すると正しい値が表示されます。
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
テーブルの実際の値ではなく、単なるテキストのように見えます)。