acts_as_api rails查询非相关字段

时间:2011-10-04 14:56:35

标签: ruby-on-rails ruby

我有两个相关的表A和B.A有a_many到B和B belongs_to A.但是我在A中有一个字段存储说A.account_number。 A与表C完全无关,表C是账户表。 D有帐户详细信息,如地址和其他详细信息。 C与D具有has_many关系并且属于C.现在在A和B中使用acts_as_api。我写了一个大查询,几乎取出了我需要的每个字段,除了帐户和帐户详细信息。如何使用acts_as_api获取此详细信息。我尝试使用调用范围子资源方法。但它不起作用。有任何想法吗。请分享。我是铁杆新手。这是我的代码。 我们说吧

   A-> item_people
   B-> item_people_roles
   C-> people_accounts
   D-> people_account_details

Class ItemPeople

class  ItemPeople < ActiveRecord::Base

  has_many:item_people_roles, class_name => "ItemPeopleRole", :dependent => :destroy
  accepts_nested_attributes_for :item_people_roles, :allow_destroy => true, :reject_if => :all_blank

acts_as_api

  api_accessible :bill_rewriting do |bill|
   bill.add :account_number
   bill.add :item_people_roles
  end
end

Class ItemPeopleRoles

class  ItemPeopleRole < ActiveRecord::Base
  attr_accessor :messages
  belongs_to :item_people, :class_name => "ItemPeople"


  acts_as_api

  api_accessible :bill_rewriting do |bill|
    bill.add :item_people_id, :as => :shipper_id, :if => lambda{|u|u.role_type_code=="SHIPPER"}
    bill.add :item_people_id, :as => :consignee_id, :if => lambda{|u|u.role_type_code=="CONSIGNEE"}
    bill.add :item_people_id, :as => :ship_to_id, :if => lambda{|u|u.role_type_code=="SHIPTO"}
   end

end

C类人

class  People < ActiveRecord::Base
#  This model has account number
# account type fields
end

D类People_Details

class  PeopleDetails < ActiveRecord::Base
#  This model has address1, address2, name1, name2 

end

现在根据人们在itempeopleroles中的角色,我需要在ItemPeople的acts_as_api中获取人和人的详细信息。希望我现在很清楚

2 个答案:

答案 0 :(得分:1)

实现此目的的最佳方法是通过模板Proc / lambda

api_accessible :public do |template|
  template.add lambda { |record,options|
     # look at options, and use those to build your custom data
     return [the correct data]
  }, :as => :a_magic_field
end

然后在你的控制器中,获得一个结果集,&#34;注释&#34;它,然后渲染它。

raw_results = Model.where(... some where conditions ....)
results = raw_results.as_api_response(:public, ... [some other options to appear in your lambda])

最后呈现它:

respond_to do |format|
  format.json {render :json => results, :callback => params[:callback]}
  format.xml {render :xml => results}
end

有了这个,你可以在lambda中编写你想要的任何代码来导航你的数据结构,无论它是如何布局的。它将如何表现是另一个问题......

答案 1 :(得分:0)

(我暂时无法添加评论)。

如果A有A.account_number而C是会计科目表,为什么你不能在A和C之间有关联(甚至A和D以及C和D)?

我的“回答”是添加这些关联,然后使用正确的:include语法。我真的没看到act_as_api提供的内容。