2012-02-28 1 views
0

두 개의 레일 애플리케이션이 있습니다. 내 목표는 ActiveResource를 통해 두 번째 Rails 애플리케이션에 정보를 저장하는 연락처 양식이있는 하나의 Rails 애플리케이션을 얻는 것입니다. 유효성 검사없이 리소스를 얻을 수 있지만 유효성 검사를 추가하면 오류 메시지가 양식과 함께 Rails 응용 프로그램에 표시되지 않습니다.어떻게 ActiveResource를 통해 유효성 검사 오류를 수신하지 못합니까?

class CustomerTicket < ActiveRecord::Base 
    validates_presence_of :first_name, :last_name, :email, :phone, :address1, :address2, 
         :city, :state, :postcode, :question 

    validates_length_of :phone, { :minimum => 7} 

    validates_format_of :email, { :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i, :message => 'Please include a proper e-mail address.' } 
end 

그리고 컨트롤러 : 데이터베이스를 가진 레일 응용 프로그램은 그래서 CustomerTicket 모델 설정을 가지고

class CustomerTicketsController < ApplicationController 
    load_and_authorize_resource 
    skip_authorization_check :only => [:new, :create] 
    skip_authorize_resource :only => [:new, :create] 
    def index 
    @q = CustomerTicket.search(params[:q]) 
    @customer_tickets = @q.result.order('created_at DESC').page params[:page] 

    respond_to do |format| 
     format.html # index.html.erb 
    end 
    end 

    def show 
    @customer_ticket = CustomerTicket.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
    end 
    end 

    def new 
    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @customer_ticket } 
    end 
    end 

    # GET /customer_tickets/1/edit 
    def edit 
    end 

    # POST /customer_tickets 
    # POST /customer_tickets.json 
    def create 
    respond_to do |format| 
     if @customer_ticket.save 
     format.html { redirect_to @customer_ticket, notice: 'Customer ticket was successfully created.' } 
     format.json { render json: @customer_ticket, status: :created, location: @customer_ticket } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @customer_ticket.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    def update 
    respond_to do |format| 
     if @customer_ticket.update_attributes(params[:customer_ticket]) 
     format.html { redirect_to @customer_ticket, notice: 'Customer ticket was successfully updated.' } 
     else 
     format.html { render action: "edit" } 
     end 
    end 
    end 

    def destroy 
    @customer_ticket.destroy 

    respond_to do |format| 
     format.html { redirect_to customer_tickets_url } 
    end 
    end 
end 

* 참고 : 캉캉 내 자원

레일 앱을로드 및 구축 양식은 다음과 같이 해당 모델 설정을 갖습니다.

class CustomerTicket < ActiveResource::Base 
    self.site = "http://myurl:3000/" 
end 

나는 다음을 실행 ActiveResource 모델이 레일 응용 프로그램 :

ruby-1.9.2-p290 :001 > c = CustomerTicket.new(:first_name => "Josh") 
=> #<CustomerTicket:0x007f7f89815528 @attributes={"first_name"=>"Josh"}, @prefix_options={}, @persisted=false> 

ruby-1.9.2-p290 :002 > c.save 
=> false 

ruby-1.9.2-p290 :003 > c.valid? 
=> true 

ruby-1.9.2-p290 :004 > c.errors.count 
=> 0 

ruby-1.9.2-p290 :005 > c.errors 
=> #<ActiveResource::Errors:0x007f7f88b165c0 @base=#<CustomerTicket:0x007f7f89815528 @attributes={"first_name"=>"Josh"}, @prefix_options={}, @persisted=false, @remote_errors=#<ActiveResource::ResourceInvalid: Failed. Response code = 422. Response message = Unprocessable Entity.>, @validation_context=nil, @errors=#<ActiveResource::Errors:0x007f7f88b165c0 ...>>, @messages={}> 

은 그래서 기록이 저장되지 않는다는 것을 인식하고, 그러나 나는 오류 및 자사의 검증 여부에 액세스 할 수 없습니다. 내가 뭘 놓쳤는가?

+0

레일 버전? – Fivell

답변

0

json 버전의 Active Resource에 버그가 있다고 생각합니다. json 대신 XML을 사용하도록 Rails 응용 프로그램을 구성 했으므로 모두 훌륭합니다.