10

Tôi đã tìm kiếm một lúc nhưng tôi chưa thể tìm thấy câu trả lời thỏa đáng. Tôi có hai ứng dụng. FrontApp và BackApp. FrontApp có một tài nguyên hoạt động bắt chước một mô hình trong BackApp. Tất cả các xác nhận mức mô hình đều tồn tại trong BackApp và tôi cần phải xử lý các xác thực BackApp đó trong FrontApp. đang hoạt động tài nguyênXử lý lỗi ActiveResource

Tôi đã sau:

class RemoteUser < ActiveResource::Base 
    self.site = SITE 
    self.format = :json 
    self.element_name = "user" 
end 

một mô hình mà là như sau

class User < ActiveRecord::Base 

    attr_accessor :username, :password 

    validates_presence_of :username 
    validates_presence_of :password 
end 

Bất cứ khi nào tôi có thể tạo một RemoteUser mới trong ứng dụng trước này bắt chước; Tôi gọi .save vào nó. ví dụ:

user = RemoteSession.new(:username => "user", :password => "") 
user.save 

Tuy nhiên, vì mật khẩu trống nên tôi cần trả lại lỗi cho FrontApp từ BackApp. Điều này không xảy ra. Tôi chỉ không hiểu làm thế nào để làm điều đó thành công. Đây phải là một kịch bản tích hợp chung; nhưng dường như không có tài liệu tốt cho nó?

điều khiển cảm giác yên tĩnh của tôi hoạt động như một proxy là như sau:

class UsersController < ActionController::Base 
    def create 
    respond_to do |format| 
     format.json do 
     user = User.new(:username => params[:username], :password => params[:password]) 
     if user.save 
      render :json => user 
     else 
      render :json => user.errors, :status => :unprocessable_entity 
     end 
     end 
    end 
    end 
end 

nó là gì mà tôi đang thiếu? Bất kỳ trợ giúp sẽ được nhiều đánh giá cao.

Cheers

Trả lời

13

Từ mã ray nguồn tôi đã tìm ra rằng lý do ActiveResource đã không nhận lỗi là vì tôi đã không được gán lỗi để "sai sót" thẻ trong json. Nó không có giấy tờ nhưng yêu cầu. :)

Vì vậy, mã của tôi cần phải có được:

render :json => {:errors => user.errors}, :status => :unprocessable_entity 
+0

'format.json {render: json => {: errors => @ customer.errors},: status =>: unprocessable_entity}' ----> Điều này sẽ hoạt động ..... Tôi cũng có cùng một vấn đề vì tôi đã sử dụng mã như @ customer.errors.full_messages, nó không được gán và trả lại ứng dụng tài nguyên đang hoạt động –

1

Trong mã:

class UsersController < ActionController::Base 
    def create 
    respond_to do |format| 
     format.json do 
     user = User.new(:username => params[:username], :password => params[:password]) 
     if user.save 
      render :json => user 
     else 
      render :json => user.errors, :status => :unprocessable_entity 
     end 
     end 
    end 
    end 
end 

cố gắng để thay thế

user = User.new(:username => params[:username], :password => params[:password]) 

với

user = User.new(params[:user]) 

mô hình hoạt động, tài nguyên của bạn vượt qua params như băm trên :

:user => { :username => "xpto", :password => "yst" } 
+0

Cảm ơn cho tip, nhưng liệu điều đó có góp phần vào việc giải quyết vấn đề tôi đang gặp phải không? – Priyank

+0

Đường nối đó là lỗi duy nhất trong mã của bạn. Tôi nghĩ rằng có lẽ sai lầm đó không làm cho mô hình hoàn thành các lỗi. Nếu điều đó không giúp được gì, tôi xin lỗi nhưng tôi không biết phải làm gì khác. – robertokl

1

Giải pháp này làm việc cho tôi: https://stackoverflow.com/a/10051362/311744

cập nhật hoạt động:

def update 
    @user = User.find(params[:id]) 

    respond_to do |format| 
     if @user.update_attributes(params[:user]) 
     format.html { redirect_to @user, notice: 'User was successfully updated.' } 
     format.json { head :no_content } 
     else 
     format.html { render action: 'edit' } 
     format.json { 

      render json: @user.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

Calling điều khiển:

@remote_user = RemoteUser.find(params[:id]) 
if (@remote_user.update_attributes(params[:remote_user])) 
    redirect_to([:admin, @remote_user], notice: 'Remote user was successfully updated.') 
else 
    flash[:error] = @remote_user.errors.full_messages 
    render action: 'edit' 
end