Własne akcje w kontrolerze

Zaczynam z Ruby on Rails i mam zagwozdkę. W kontrolerze robię własną akcję "available", w której wyświetlam odpowiednią listę. Mam widok do tej akcji.

class GadgetsController < ApplicationController

  def available
    @gadgets = GadgetItem.active
  end

...

W routes.rb dodałem:

map.resources :gadgets, :collection => {
          :available => :get
          }

Jednak gdy w widoku innego modelu, tworzę linka do tej akcji:

<p><%= link_to "Dostępne Gadżety", available_gadgets_path %></p>

to wywala mi błąd:

ActiveRecord::RecordNotFound in Gadget itemsController#available

Couldn't find Gadget without an ID

Dodam tylko, że Gadget.active to named_scope modelu, wyszukujący określone modele.

Rails 2.3.5; ruby 1.8.7(patchlevel 248)

Jak to obejść? Nie mogę wygooglać odpowiedzi.

2 lata, 3 miesiące temu | edytowane przez: mario_offline 12401212

  • Po długiej nocy znalazłem problem: używam gema declarative_authorization. W kontrolerze używałem metody filter_resource_access, która pozwala na kontrolowanie uprawnień do akcji. Metoda ta jednak próbuje utworzyć model, o ID podanym w parametrze. Zastąpiłem ją metodami:

    filter_access_to :all
    filter_access_to :available, :require => :read
    

    i wszystko wróciło do normy, tylko w pliku konfiguracyjnym muszę ustawić dostęp do :read dla konkretnych ról i wszystko działa.

    Nie lubię odpowiadać na swoje pytania, ale jak już zapytałem i dość czasu spędziłem na szukaniu odpowiedzi - to muszę.

Zaloguj się, aby dodać swoją odpowiedź