0

Я глубоко вложенные ресурсы ниже:Как получить соответствующие данные из глубоко вложенных ресурсов

resources :venues, shallow: true do 
     #Halls 
     get "hall/:id/exhibition" => "halls#exhibition", as: :exhibition 
     get "hall/:id/visit" => "halls#visit", as: :hall_visit 
     get "structure", :to => "venues#venue_structure" 
     resources :asset_types, :booths_tags, :tags, :uploaded_files, :events, :chats 
     resources :halls do 
      resources :webcasts 
      resources :booths do 
       resources :chats 
      end 
     end 
    end 

Я хочу, чтобы получить все events строки, принадлежащие определенному пользователю с помощью activerecord

Я попытался ниже, но это не кажется, не генерируя результаты, которые я хочу что данные события:

def all_events 
    @events = User.joins(:venues => [:events]).where("venues.user_id" => current_user.id).select("events.*, users.*") 
    render json: @events 
    end 

Вышеприведенному:

{ 
users: [ 
{ 
id: 1, 
email: "eeee", 
title: "Mr", 
first_name: "aaaa", 
last_name: "cccc", 
position: "Web Developer", 
work_phone: "123456", 
company: "aaasszz", 
sign_in_count: 60, 
last_sign_in_ip: "127.0.0.1", 
confirmed_at: "2013-10-29T12:26:00.583+11:00", 
created_at: "2013-10-29T12:23:25.453+11:00", 
roles: [ 
3 
] 
}, 
{ 
id: 1, 
email: "email", 
title: "Mr", 
first_name: "aaa", 
last_name: "bbb", 
position: "Web Developer", 
work_phone: "123456", 
company: "sss", 
sign_in_count: 60, 
last_sign_in_ip: "127.0.0.1", 
confirmed_at: "2013-10-29T12:26:00.583+11:00", 
created_at: "2013-10-29T12:23:25.453+11:00", 
roles: [ 
3 
] 
} 
] 
} 

Я хочу событие данных в формате JSON вместо ...

Я также использую активные модели сериализаторы.

Каков наилучший подход для решения этой проблемы?

Модель событий:

class Event < ActiveRecord::Base 
    resourcify 
    belongs_to :venue 

    validates :name, :start, :finish, presence: true 

    has_one :event_image, ->{where(:image_type => UploadedFile::IMAGE_TYPE_EVENT_IMAGE)}, as: :imageable, class_name: 'UploadedFile', dependent: :destroy 
    has_one :logo1, ->{where(:image_type => UploadedFile::IMAGE_TYPE_EVENT_LOGO1)}, as: :imageable, class_name: 'UploadedFile', dependent: :destroy 
    has_one :logo2, ->{where(:image_type => UploadedFile::IMAGE_TYPE_EVENT_LOGO2)}, as: :imageable, class_name: 'UploadedFile', dependent: :destroy 
    accepts_nested_attributes_for :event_image, :logo1, :logo2, :reject_if => proc { |attributes| attributes['assets'].blank? } 

end 
+0

показать свою модель событий код, наряду с именами событий столбцов таблицы – beck03076

+0

@ beck03076 Я только что обновил модель события –

+0

, поэтому событие принадлежит к месту проведения, место принадлежит пользователю. Пользователь has_many Места проведения и события has_many. Ваш вход - идентификатор current_user. Итак, вы хотите, чтобы все события принадлежали объектам current_user ??? – beck03076

ответ

0

Маршруты не важна для извлечения записей из базы данных. Единственное, что имеет значение здесь, это модель. Вы можете включить связанные объекты с the includes method from ActiveRecord. Поскольку вам нужны события в конце, просто запустите запрос из модели Event. Вот самое простое решение, которое я могу придумать:

Event.includes(:venue).where(:venues => {:user_id => current_user.id}) 

если вам не нужны данные места, просто использовать joins:

Event.joins(:venue).where(:venues => {:user_id => current_user.id}) 
+0

Я получаю эту ошибку 'Нет сопоставлений маршрутов {: controller =>" events ",: action =>" show "} отсутствующие необходимые ключи: [: id]' –

+0

Извините, обновил мой ответ. Я думаю, что теперь это должно работать без каких-либо изменений. –

+0

Я получаю 'Нет совпадений маршрутов {: controller =>" events ",: action =>" show "} Отсутствующие необходимые ключи: [: id]' –

Смежные вопросы