Как передать параметры вложенным ресурсам для наследования одной таблицы в Ruby on Rails? - PullRequest
1 голос
/ 30 марта 2012

У меня проблемы с передачей параметров моему контроллеру. Я создал модель наследования одной таблицы в моем файле модели.

class Account < ActiveRecord::Base
    belongs_to :user
end
class AdvertiserAccount < Account
end
class PublisherAccount < Account
end

Я настроил свою таблицу маршрутов с вложенными ресурсами

resources :advertiser_accounts do
    resources :campaigns
end

Я хочу иметь возможность передать текущий account_id (account_id из одного из моих двух подклассов учетной записи) в файл контроллера моей кампании. URL, который я бы использовал: http://127.0.0.1:3000/advertiser_accounts/1/campaigns Так как мой ресурс для URL - это рекламодатель, а не учетные записи, я не могу получить параметр: account_id.

class CampaignsController < ApplicationController
def index
    @account = current_user.accounts.find_by_id(params[:account_id])
end
end

есть ли ярлык для получения текущего ресурса или идентификатора? Я правильно передаю параметры? Кажется странным вызывать многие find_by_id в контроллере. Любая помощь приветствуется.

Изменить Возможное решение: Одним из решений, о котором я думал, было задание типа в моих маршрутах, а затем в контроллере я бы использовал оператор case, а затем получил params [: advertiser_account_id], но это кажется очень утомительным и грязным. Особенно, если мне нужно будет скопировать и вставить список инструкций в каждом действии.

routes.rb

resources :advertiser_accounts, :type => "AdvertiserAccounts" do
    resources :campaigns
end

campaigns_controller.rb

def index
    case params[:type]
     when "AdvertiserAccounts"
            @account = current_user.accounts.find_by_id(params[:advertiser_account_id])
     when "PublisherAccounts"
            @account = current_user.accounts.find_by_id(params[:publisher_account_id])
    end
end

Ответы [ 2 ]

1 голос
/ 30 марта 2012

Попробуйте это:

resources :advertiser_accounts, :as => "account" do
    resources :campaigns
end

это должно дать вам

/advertiser_accounts/:account_id/campaigns/:id(.:format)
0 голосов
/ 24 октября 2014

Вы можете попробовать метод «становится» в вашем контроллере. В вашем личном методе, где вы ищете account_id, вы получите:

@account = Account.find(params[:account_id]).becomes Account
...