2015-01-26 1 views
0

Я могу получить доступ к файлам shopping_list_products, загруженным в этот вызов API с консоли без ошибок.Неопределенный метод 'id' для класса, но консоль загружается отлично

Я получаю 500 на API, однако:

ActionView::Template::Error (undefined method `id' for #<Class:0x007f6cca7e1dd0>): 
2015-01-26T23:51:07.608697+00:00 app[web.1]:  1: collection :@shopping_list_products 
2015-01-26T23:51:07.608699+00:00 app[web.1]:  2: extends 'api/v1/shopping_list_products/_show' 

index.json.rabl:

collection :@shopping_list_products 
extends 'api/v1/shopping_list_products/_show' 

show.json.rabl:

object :@shopping_list_product 
extends 'api/v1/shopping_list_products/_show' 

_show.json .rabl:

object :shopping_list_product 
attribute(:id, :if => lambda { |m| m.id }) 
attributes :shopping_list_retailer_id, :product_id, ... 

... more attributes 

child :product, partial: 'api/v1/products/_show' 
child :product_category, partial: 'api/v1/product_categories/_show' 

node(:url) do |shopping_list_product| 
    api_v1_schedule_requisition_plan_shopping_list_shopping_list_retailer_shopping_list_product_path(@schedule, @shopping_list_retailer, shopping_list_product, format: :json) 
end 

EDIT: я удалил атрибут id, а затем перешел к следующей ошибке: «undefined method shopping_list_retailer_id для класса:». Почему это происходит?

EDIT: Обнаруженное это мой код вызывается из контроллера .. если я вернусь

@shopping_list_retailer.shopping_list_products он прекрасно работает.

Но я вместо этого:

api :GET, '/schedule/:schedule_id/requisition_plan/shopping_list/shopping_list_retailers/:shopping_list_retailer_id/shopping_list_products', 'List all shopping list products for Shopping List for Requisition Plans for Schedule in the database' 
param :query, String, desc: "Scoped_search style query string" 
def index 
    @shopping_list_products = ShoppingListProductsIndexQuery.new(@shopping_list_retailer, params[:query]).shopping_list_products 
end 

class ShoppingListProductsIndexQuery 
    attr_reader :shopping_list_retailer, :query 
    def initialize(shopping_list_retailer, query) 
    @shopping_list_retailer = shopping_list_retailer 
    @query = query 
    end 

    def shopping_list_products 
    @shopping_list_retailer.shopping_list_products.ordered_by_product_category_type_and_product_category_name_and_product_name.search_for(query) 
    end 
end 

Тем не менее смущен, почему не определен метод идентификатор для класса ударил по мнению RABL.

ответ

0

Ваше сообщение об ошибке (undefined method 'id' for #<Class:0x007f6cca7e1dd0>) говорит, что неопределенный метод находится в экземпляре Class вместо экземпляра ShoppingListProduct (или независимо от вашего фактического имени класса).

Это означает, что визуализируется неправильная вещь.

Вероятно потому, что вы используете:

object :@shopping_list_products 
# and 
object :@shopping_list_product 

Вместо:

object @shopping_list_products 
# and 
object @shopping_list_product 

Снимите : с.

Кроме того, в файле _show.json.rabl, вы действительно не нужно

object :shopping_list_product 

как это игнорируется, когда шаблон RABL используется в качестве частичного (https://github.com/nesquena/rabl/wiki/Reusing-templates)

+0

Та же проблема, до сих пор. – quantumpotato