2010-06-20 3 views
2

레일을 처음 접했고 버그를 찾기 위해 몇 시간을 보냈습니다. 어떤 도움이라도 대단히 감사합니다.XML Builder in Rails : '추적 할 수없는 잘못된 인수'버그

사용자가/info/who_bought/1을 입력하면 페이지가 HTML을 출력하고 /info/who_bought/1.xml을 입력하면 페이지가 XML 파일을 반환하도록 레일스 페이지를 만들려고합니다. (요약하자면 'Agile Web Development with Rails'서적에서)

HTML 형식의 출력은 정상적으로 작동하지만 xml을 입력하면 '잘못된 인수 수 (1 0) '오류 페이지. 실제 전자 책을 다운로드하고 모든 코드의 직접 복사/붙여 넣기를 수행했습니다. 여전히 같은 문제에 직면 해있다. Google은 코드 버그에 대한 언급을 제기하지 않습니다.

코드 & 아래의 전체 스택 추적. 누구든지 어떤 아이디어가 있다면 나는 매우 감사 할 것입니다. 간단히 말해 xml.builder가 '1 for 0 arguments'버그를 반환 할 수 있습니까?

많은 감사, 수하물

# app/controllers/info_controller.rb 
class InfoController < ApplicationController 
    def who_bought 
     @product = Product.find(params[:id]) 
     @orders = @product.orders 
     respond_to do |format| 
      format.html 
      format.xml {render :layout => false } 
     end 
    end 

    protected 
    def authorize 
    end 
end 


# app/views/info/who_bought.xml.builder 
xml.order_list(:for_product => @product.title) do 
    for o in @orders 
     xml.order do 
      xml.name(o.name) 
      xml.email(o.email) 
     end 
    end 
end 


# app/models/product.rb 
class Product < ActiveRecord::Base 
    has_many :orders, :through => :line_items 
    has_many :line_items 
    validates_presence_of :title, :description, :image_url 
    validates_numericality_of :price 
    validates_uniqueness_of :title 
    validates_length_of :title, 
         :minimum => 10 
    validates_format_of :image_url, 
         :with => %r{\.(gif|jpg|png)$}i, 
         :message => 'must be a URL for GIF, JPG ' + 
           'or PNG image.' 
    validate :price_must_be_at_least_a_cent 

    def price_must_be_at_least_a_cent 
     errors.add(:price, 'should be at least 0.01') if price.nil? || price < 0.01 
    end 

    def self.find_products_for_sale 
     find(:all, :order => "title") 
    end 

end 

# config/routes.rb 
ActionController::Routing::Routes.draw do |map| 
    map.resources :users 
    map.resources :line_items 
    map.resources :orders 
    map.resources :products 
    map.connect ':controller/:action' 
    map.connect ':controller/:action/:id' 
    map.connect ':controller/:action/:id.:format' 
end 


# Full trace 
/usr/lib/ruby/1.8/builder/xmlbase.rb:134:in `to_xs' 
/usr/lib/ruby/1.8/builder/xmlbase.rb:134:in `_escape' 
/usr/lib/ruby/1.8/builder/xmlbase.rb:87:in `text!' 
/usr/lib/ruby/1.8/builder/xmlbase.rb:144:in `_newline' 
/usr/lib/ruby/1.8/builder/xmlbase.rb:60:in `method_missing' 
app/views/info/who_bought.xml.builder:2 
vendor/rails/activerecord/lib/active_record/associations/association_collection.rb:359:in `method_missing' 
vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:212:in `method_missing' 
vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:212:in `each' 
vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:212:in `send' 
vendor/rails/activerecord/lib/active_record/associations/association_proxy.rb:212:in `method_missing' 
vendor/rails/activerecord/lib/active_record/associations/association_collection.rb:359:in `method_missing' 
app/views/info/who_bought.xml.builder:1 
vendor/rails/actionpack/lib/action_view/renderable.rb:39:in `send' 
vendor/rails/actionpack/lib/action_view/renderable.rb:39:in `render' 
vendor/rails/actionpack/lib/action_view/template.rb:73:in `render_template' 
vendor/rails/actionpack/lib/action_view/base.rb:256:in `render' 
vendor/rails/actionpack/lib/action_controller/base.rb:1177:in `render_for_file' 
vendor/rails/actionpack/lib/action_controller/base.rb:940:in `render_without_benchmark' 
vendor/rails/actionpack/lib/action_controller/benchmarking.rb:51:in `render' 
vendor/rails/activesupport/lib/active_support/core_ext/benchmark.rb:8:in `realtime' 
vendor/rails/actionpack/lib/action_controller/benchmarking.rb:51:in `render' 
app/controllers/info_controller.rb:6 
vendor/rails/actionpack/lib/action_controller/mime_responds.rb:135:in `call' 
vendor/rails/actionpack/lib/action_controller/mime_responds.rb:135 
vendor/rails/actionpack/lib/action_controller/mime_responds.rb:164:in `call' 
vendor/rails/actionpack/lib/action_controller/mime_responds.rb:164:in `respond' 
vendor/rails/actionpack/lib/action_controller/mime_responds.rb:158:in `each' 
vendor/rails/actionpack/lib/action_controller/mime_responds.rb:158:in `respond' 
vendor/rails/actionpack/lib/action_controller/mime_responds.rb:107:in `respond_to' 
app/controllers/info_controller.rb:5:in `who_bought' 
vendor/rails/actionpack/lib/action_controller/base.rb:1256:in `send' 
vendor/rails/actionpack/lib/action_controller/base.rb:1256:in `perform_action_without_filters' 
vendor/rails/actionpack/lib/action_controller/filters.rb:617:in `call_filters' 
vendor/rails/actionpack/lib/action_controller/filters.rb:610:in `perform_action_without_benchmark' 
vendor/rails/actionpack/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue' 
/usr/lib/ruby/1.8/benchmark.rb:293:in `measure' 
vendor/rails/actionpack/lib/action_controller/benchmarking.rb:68:in `perform_action_without_rescue' 
vendor/rails/actionpack/lib/action_controller/rescue.rb:136:in `perform_action_without_caching' 
vendor/rails/actionpack/lib/action_controller/caching/sql_cache.rb:13:in `perform_action' 
vendor/rails/activerecord/lib/active_record/connection_adapters/abstract/query_cache.rb:34:in `cache' 
vendor/rails/activerecord/lib/active_record/query_cache.rb:8:in `cache' 
vendor/rails/actionpack/lib/action_controller/caching/sql_cache.rb:12:in `perform_action' 
vendor/rails/actionpack/lib/action_controller/base.rb:524:in `send' 
vendor/rails/actionpack/lib/action_controller/base.rb:524:in `process_without_filters' 
vendor/rails/actionpack/lib/action_controller/filters.rb:606:in `process_without_session_management_support' 
vendor/rails/actionpack/lib/action_controller/session_management.rb:134:in `process' 
vendor/rails/actionpack/lib/action_controller/base.rb:392:in `process' 
vendor/rails/actionpack/lib/action_controller/dispatcher.rb:184:in `handle_request' 
vendor/rails/actionpack/lib/action_controller/dispatcher.rb:112:in `dispatch_unlocked' 
vendor/rails/actionpack/lib/action_controller/dispatcher.rb:125:in `dispatch' 
vendor/rails/actionpack/lib/action_controller/dispatcher.rb:124:in `synchronize' 
vendor/rails/actionpack/lib/action_controller/dispatcher.rb:124:in `dispatch' 
vendor/rails/actionpack/lib/action_controller/dispatcher.rb:134:in `dispatch_cgi' 
vendor/rails/actionpack/lib/action_controller/dispatcher.rb:41:in `dispatch' 
/usr/lib/ruby/1.8/mongrel/rails.rb:76:in `process' 
/usr/lib/ruby/1.8/mongrel/rails.rb:74:in `synchronize' 
/usr/lib/ruby/1.8/mongrel/rails.rb:74:in `process' 
/usr/lib/ruby/1.8/mongrel.rb:159:in `process_client' 
/usr/lib/ruby/1.8/mongrel.rb:158:in `each' 
/usr/lib/ruby/1.8/mongrel.rb:158:in `process_client' 
/usr/lib/ruby/1.8/mongrel.rb:285:in `run' 
/usr/lib/ruby/1.8/mongrel.rb:285:in `initialize' 
/usr/lib/ruby/1.8/mongrel.rb:285:in `new' 
/usr/lib/ruby/1.8/mongrel.rb:285:in `run' 
/usr/lib/ruby/1.8/mongrel.rb:268:in `initialize' 
/usr/lib/ruby/1.8/mongrel.rb:268:in `new' 
/usr/lib/ruby/1.8/mongrel.rb:268:in `run' 
/usr/lib/ruby/1.8/mongrel/configurator.rb:282:in `run' 
/usr/lib/ruby/1.8/mongrel/configurator.rb:281:in `each' 
/usr/lib/ruby/1.8/mongrel/configurator.rb:281:in `run' 
/usr/bin/mongrel_rails:129:in `run' 
/usr/lib/ruby/1.8/mongrel/command.rb:212:in `run' 
/usr/bin/mongrel_rails:282 
+0

는이 문제를 해결하기 위해 관리나요? 같은 문제는 여기 – Matthias

+0

같음. 내 인생에서 원자 피드를 만들어내는 것은 불가능합니다. –

답변

-1

시도 (재)이 '빌더'보석을 설치, 나를 위해 '1 0의 인수'버그를 수정 :

sudo gem install builder 
: 아마도이 의심을 제거하는 데 유용한 전통적인 방법으로 시도

나중에 서버를 다시 시작하십시오.

+0

는 나를 위해 문제를 해결하지 못했습니다. – Matthias

+0

빌더를 재설치해도 도움이되지 않습니다. – John

-3

I 종류의 "@orders에서 O를위한 '부분을 비난하고 싶습니다.

@orders.each do |o| 
    ... 
end 
+0

안녕하세요. 불행히도 성공은 없지만 시험에 감사드립니다. – PlankTon

5

이것은 Rails 3.1, Builder 3.0과 fast_xs gem 또는 hpricot (fast_xs가 번들 됨) 사이의 충돌입니다. 어떤 사람들은 그것을 재현 할 수없는 이유는 fast_xs 나 hpricot을 Gemfile에 가지고 있지 않기 때문입니다. 한편

, 다른 원숭이를 쌓아 : 그것은 세 방향의 충돌 이후

불행하게도, 사람들은 다른 도서관의 잘못이라고 생각 힙에 패치하고 config/initializers/unbreak_string_to_xs.rb에 다음을 추가하십시오.

(중복에 this answer에서.)
class String 
    def fast_xs_absorb_args(*args); fast_xs; end 
    alias_method :to_xs, :fast_xs_absorb_args 
end 

+0

빌더로 업그레이드> = 3.0.1 – tmm1