2016-05-22 6 views
0

Я строю новый проект в rails (4.0), и у меня вопрос о том, как получить переменную в моем контроллере. У меня есть 2 модели, которые имеют отношения «два-ко-многим», «Сводки и свойства». Затем моя модель User связана через один-ко-многим через модель Locations.Как получить переменные в контроллере, от многих до многих и от одного до многих в rails

Пользователи имеют одно или несколько мест, местоположение имеет одно или несколько свойств. Свинец имеет много свойств и свойств, у которых много потенциальных клиентов.

Теперь в моем контроллере пользователя я пытаюсь иметь все ссылки, принадлежащие определенному пользователю. Может кто-то, пожалуйста, помогите мне, как получить это в моем контроллере?

В данный момент у меня есть что-то вроде этого, что явно неверно.

def operator_leads 
    if current_user 
    @user = User.find(current_user.id) 
    else 
    @user = nil 
    end 
    @leads = @user.property.each do |k| 
    leads << k.leads 
    end 
end 

UPDATE: мои текущие модели

class Location < ActiveRecord::Base 
    has_many :properties, :dependent => :destroy 
    belongs_to :user, :counter_cache => true 
end 

class Property < ActiveRecord::Base 
    include Tokenable 
    belongs_to :location 
    has_one :user ,:through => :location 
    has_many :leads, :through => :lead_properties 
    has_many :lead_properties, :dependent => :delete_all 
end 

class User < ActiveRecord::Base 
    include Tokenable 
    devise :database_authenticatable, :registerable, :confirmable, 
     :recoverable, :rememberable, :trackable, :validatable 
    has_many :locations, :dependent => :destroy 
    has_many :blogs 
    has_many :admin_leads, :class_name => 'Lead', :foreign_key => 'admin_user_id' 
    has_many :leads, :through => :properties 
end 

class Lead < ActiveRecord::Base 
    has_many :properties, :through => :lead_properties 
    has_many :lead_properties 
    belongs_to :admin_user, :class_name => "User" 
    has_many :users, :through => :properties 
end 

class LeadProperty < ActiveRecord::Base 
    belongs_to :lead 
    belongs_to :property 
    accepts_nested_attributes_for :lead 
end 
+0

Что вы подразумеваете под 'есть один или несколько'? – fbelanger

ответ

1

Используйте вложенное has_many :through для определения пользователя, имеющего множество свойств через Откуда:

class User 
    has_many :locations 
    has_many :properties, through: :locations 
    has_many :leads, through: :properties 
end 

class Location 
    belongs_to :user 
    has_many :properties 
    has_many :leads, through: :property 
end 

class Property 
    belongs_to :location 
    has_many :leads 
end 

Затем определяют контроллер:

def operator_leads 
    @user = current_user # You can use current_user in the view to avoid defining @user here. 
    @leads = current_user.leads 
end 

Документы: http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association

+0

Черт, ты избил меня! – fbelanger

+0

Привет, я не уверен, что это решение, поскольку у меня есть отношение «многие ко многим» между выводами и свойствами (через таблицу lead_properties). Я обновил свой вопрос с помощью своих моделей. Я предполагаю, что это изменит ваш ответ? –

+0

Нет, это не должно быть –