2013-06-19 15 views
0

У меня есть две модели:Связанные модели без вложенных маршрутов

class GarageOwner < ActiveRecord::Base 
    has_many :garages, dependent: :destroy 
end 

class Garage < ActiveRecord::Base 
    belongs_to :garage_owner 
end 

гаражной никогда не должны существовать без владельца гаража. Поэтому в действии GaragesController мне нужен соответствующий владелец гаража. Я не хочу использовать вложенные маршруты, поэтому у меня нет идентификатора владельца гаража в качестве параметра. Но как мне его получить?

Обновление для некоторого разъяснения

Гаражи созданы третьей модели (Admin). Поэтому я не могу получить доступ к владельцу гаража через текущего пользователя.

Я строй мои маршруты с помощью resources:

 garage_owners GET /garage_owners(.:format)   garage_owners#index 
        POST /garage_owners(.:format)   garage_owners#create 
    new_garage_owner GET /garage_owners/new(.:format)  garage_owners#new 
    edit_garage_owner GET /garage_owners/:id/edit(.:format) garage_owners#edit 
     garage_owner GET /garage_owners/:id(.:format)  garage_owners#show 
        PUT /garage_owners/:id(.:format)  garage_owners#update 
        DELETE /garage_owners/:id(.:format)  garage_owners#destroy 
      garages GET /garages(.:format)    garages#index 
        POST /garages(.:format)    garages#create 
      new_garage GET /garages/new(.:format)   garages#new 
     edit_garage GET /garages/:id/edit(.:format)  garages#edit 
       garage GET /garages/:id(.:format)   garages#show 
        PUT /garages/:id(.:format)   garages#update 
        DELETE /garages/:id(.:format)   garages#destroy 
+0

Вы должны передать его в качестве параметра. Как выглядят ваши маршруты? Кстати, почему вы не хотите использовать вложенные маршруты? –

+0

Я не хочу, чтобы "garage_owner" отображался в моих URL-адресах. Я обновил вопрос. Вы можете увидеть маршруты там. – stevecross

+0

, откуда идет «гараж»? это не в URL-адресе, это не связано с ассоциированным пользователем, как кто-либо или приложение знают, что такое «гараж-владелец»? –

ответ

-2

Я нашел подходящее решение, которое все еще остается спокойным, я думаю. Я только что создал несколько маршрутов для гаражей:

resources :garage_owners do 
    resources :garages, except: :index 
end 

resources :garages, only: [:index, :show] 

Обычный пользователь не должен иметь доступ к другим действиям.

1

Вы могли бы подойти к этим нескольким различным способам:

  1. Если GarageOwer требует логина, вы можете захватить идентификатор GarageOwer пользователя из файла cookie, хранящегося при входе в систему.

  2. Создайте собственный маршрут match "/Garages/new/:owner_id" => "garages#new", после того как в вашем контроллере получите доступ к идентификатору владельца через params[:owner_id].

  3. Добавить owner_id как скрытый приписанный форме на странице "гаражи/новые".

+0

http://guides.rubyonrails.org/routing.html#non-resourceful-routes говорит, что это не находчивый маршрут. Это плохо? – stevecross

+0

@feuerball Это еще не конец света. Если вы действительно интересны в спокойных маршрутах, сделайте маршруты гаража вложенными ... – rudolph9

1

Может быть, я не получаю ваш вопрос, но я думаю, вы должны либо забрать владелец гаража от сеанса (например, вошедшим в системе пользователя), или что-то происходит от значения в сеансе или как значение, представленное с формой, используемой для новой операции, и в этом случае это будет параметр.

2

Решение не использовать вложенные маршруты состоит в том, чтобы вставить garage_owner_id в скрытое поле в вашей новой гаражной форме. Но вы не указали в своем вопросе о том, как новая форма гаража должна знать о том, к какому garage_owner ему нужно связать, поэтому я не могу дать вам конкретный пример.

+0

Ну, это проблема.Я не знаю, как форма должна знать об этом: P Я думаю, что мне нужно выбирать между обычным маршрутом или вложенными маршрутами, даже если это выглядит не так хорошо. – stevecross

+0

Я не беспокоюсь о том, как форма должна знать об этом, что можно решить, передав ее каким-то образом. Но как НУЖНО знать об этом? Является ли информация, хранящаяся в мозгу человека, который смотрит на форму «нового гаража»? Рельсы не могут вам помочь. –

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