Pobranie ID (nested)

Witam,

Rails 2.0, Active_Scaffold & Goldberg
Czy ktoś wie jak się dobrać do tego ID - chyba proste, ale nie wiem jak to ugryźć

class Lreview < ActiveRecord::Base
belongs_to :law

def authorized_for_create?
pp = Law.find(:first, :conditions => [ “id = ?”, co_tu_wstawić ])
if ((pp.stan_id == 1) || (pp.stan_id == 4))
return false
else
return true
end
end


end

class Law < ActiveRecord::Base
has_many :lreviews


end

class LawsController < ApplicationController

config.nested.add_link(“Notki”, [:lreviews])

end

W Active Scaffold mam tabelę przedstawiającą wszystkie “Law” i chce zobaczyć połaczone z nim notki “Lreview”
z tym, że user ma mieć możliwość dodania nowej notki tylko w przypadku, gdy stan_id w danym rekordzie “Law”, z którego wywoływane są notki jest rózne od 1 i 4

Nie wiem jak pobrać ID tego Law, dla którego zostało wywłane nested
w URL widać np. http://localhost/laws/4/nested?_method=get&associations=lreviews&adapter=_list_inline_adapter

Proszę o pomoc, wskazówkę …

ktokolwiek ?

Nie poznałem jeszcze Goldberga + Active_scaffold, ale jedyna rada jaką mogę dać: unikaj dostępu do zmiennych typu session, params, cookies… z modelu. Może jest możliwość dostania się w kontrolerze do tej zmiennej na zasadzie params[:id], a potem przekazać ją do modelu?

A gdyby nie było Active Scaffold i Goldberga jak dostałbyś się do tego parametru w modelu ?

Hm… Trochę to zagmatwałeś ale mam nadzieję, że chodzi Ci o coś takiego:

[code=ruby]class LawReview < ActiveRecord::Base
belongs_to :law

def may_create_notes?
law && ![1,4].include?(law.stan_id)
end
end[/code]
Proponuję pozmieniać nazwy na bardziej oczywiste. LawReview nie jest znacznie dłuższe a znacznie bardziej czytelne.

stan_id zastąpił bym przez po prostu state, chyba, że LawReview.belongs_to :state, wtedy radziłbym użyć pluginu http://svn.protocool.com/public/plugins/enumerations_mixin/ albo http://github.com/zargony/activerecord_symbolize/tree/master

Dzięki, ale nie działa ;(

authorized_for_create? to metoda Active Scaffold, i w zależności czy zwraca true or false akcje create dla danego rekordu jest dostępna lub nie

Nie wiem dlaczego, ale jeżeli jawnie nie zwracam true lub false to ta metoda nie działa

Jak przerobić Twoje dzieło, aby zwracało jawnie true lub false w modelu “Lreview” w przypadku gdy stan_id wybranego rekordu “Law” ma 1,4 - false a 2,3 -true ?

Nie obraź się, ale co raz częściej spotykam taki fenomen jak Ty. Jakim cudem tak proste rzeczy Cię blokują, a jesteś w stanie w ogóle zacząć projekt? Dostajesz gotową odpowiedź i nie jesteś w stanie jej dostosować do swoich warunków?

def authorized_for_create? return may_create_notes? end
Czy to takie trudne?

Że też nie wspomnę, że po 2 miesiącach od zarejestrowania się na forum nie umiesz poprawnie sformatować kodu Rubiego.

Możesz rozwinąć myśl? Bo mnie to wygląda na jakąś kolejną głupotę.

I jeszcze mały komentarz do Twojego kodu:

def authorized_for_create? pp = Law.find(:first, :conditions => [ "id = ?", co_tu_wstawić ]) if ((pp.stan_id == 1) || (pp.stan_id == 4)) return false else return true end end
Nazwa zmiennej pp? Niech zgadnę: PierwszaPomoc? Po co deklarujesz relację między Lreview i Law skoro radzisz sobie bez niej? ( Law.find(:first, :conditions => [ “id = ?”, co_tu_wstawić ])). No prawie, bo ‘co_tu_wstawić’ nie najlepiej o Tobie świadczy.

Potraktuj mój komentarz jako dobrą lekcję lub daruj sobie programowanie :].

Panie Radku Bulat dziękuję za “lekcję” i proszę zauważyć, że może próbowałem takiej metody a nawet krótszej ale w ciągle to nie działa !!! - po prostu blokuje Create dla wszystkich rekordów i już - a nie dla tych, które mają spełnione określone kryteria -czyli nadal jest coś nie tak.

Czy wyznacznikiem doświadczeń z Ruby on Rails jest czas od zarejestrowaniu na forum ? hmm…

Rubiego trochę poznałem, z railem się jeszcze gubię - niestety ale musiałem coś szybko zrobić, aby działało i wykorzystałem najkrótszą drogę, która zazwyczaj nie jest najlepsza, czyli pominełem standardowe metody Rails, aby za mnie zrobił to Goldberg i ActiveScaffold i teraz mam nauczkę.

Najepsze jest to że ciągu kilunastu dni (tak naprawdę kilkunastu godzin) aplikacja działała - teraz ją muszę ją dopracować.

Więc jeżeli wie Pan jak rozwiązać problem to prosiłbym o Działającą Odpowiedź

Uuu, widzę że Radarek też już traci cierpliwość do pytań poniżej pewnego poziomu :wink: