Forum: Italian Ruby user group Passare parametri da una vista ad un controller

0d4857c0bd9540f743afc22758a06c46?d=identicon&s=25 FleX (Guest)
on 2013-11-06 09:27
(Received via mailing list)
Ciao,

abuso del vs aiuto per un problema banale, ma che non riesco a risolvere
da ieri sera.
Ho un link che richiama la new di un controller come segue:

<%= link_to 'Feedback', new_feed_path(:shop_id => @shop.id) %>

(ho provato anche :shop => @shop, ma non cambia nulla)

nel controller aggiungo la righa con * :

def new
    @feed = Feed.new
*   @feed.evaluated_shop = Shop.find(params[:shop_id])
end

def create
    @feed = Feed.new(feed_params)
    @feed.user = current_user

    respond_to do |format|
        if @feed.save
            format.html { redirect_to @feed, notice: 'created.' }
            format.json { render action: 'show', status: :created,
location: @feed }
        end
    end
end

def feed_params
    params.require(:feed).permit(:title, :shop_id, :rating)
end

Il problema e' che shop_id e' null. Perche' ?


--
FleX
[Linux User #347703 PGP Key ID: 98AA9D3E
FingerPrint: 7D25B 0CE4 898A 22CB F765  E2A5 88B7 4C5C 98AA 9D3E]
Dfa0e5f195b6f312006b465809b76b0b?d=identicon&s=25 Emanuele DelBono (Guest)
on 2013-11-06 09:46
(Received via mailing list)
Sparo...
..hai provato con <%= link_to 'Feedback', new_feed_path(@shop.id) %>
Cb8e3a1650513848561ca38f84399fa1?d=identicon&s=25 Fabrizio Regini (freegenie)
on 2013-11-06 10:28
(Received via mailing list)
Cos a grandi linee:

- Controlla con `rake routes` come viene interpretato il percorso.
- Controlla prima che tutto funzioni digitando a mano il percorso nella
barra dell'indirizzo e dopo controlla che l'href sia quello che deve
essere
e non qualcos'altro.

se params[:shop_id]  null vuol dire che il routing non la interpreta
bene.
E' una nested resource per caso?



On Wed, Nov 6, 2013 at 9:46 AM, Emanuele DelBono
<emanuele.delbono@gmail.com
Fb4482bd900141ed8bd3f3fcc3723f90?d=identicon&s=25 Luca Mearelli (Guest)
on 2013-11-06 11:18
(Received via mailing list)
l'url richiamata qui: <%= link_to 'Feedback', new_feed_path(:shop_id =>
@
shop.id) %>

immagino che apra una new che contiene una form per creare un feedback,
e
che il relativo POST vada a finire nella create di quel controller.

la prima cosa che farei e' controllare dal log che tra i parametri
passati
alla create ci sia :shop_id

Se NON hai usato un routing in cui lo shop_id e' incluso nell'url,
allora
devi assicurarti che nella form presente nella pagina new ci sia un
campo
(nascosto) che lo contiene (e quando apri la pagina il campo nascosto
deve
avere il valore giusto

Altra cosa che mi pare da verificare: @feed.*evaluated_shop* =
Shop.find(params[:shop_id])
In feed immagino che ci sia un campo shop_id, e non magari
evaluated_shop_id, giusto?

ciao,
Luca
0d4857c0bd9540f743afc22758a06c46?d=identicon&s=25 flex@programmareweb.com (Guest)
on 2013-11-06 17:48
(Received via mailing list)
> Sparo...> ..hai provato con <%= link_to 'Feedback', new_feed_path(@shop.id) %>
>

purtroppo non funge

--
FleX
[Linux User #347703 PGP Key ID: 98AA9D3E
FingerPrint: 7D25B 0CE4 898A 22CB F765  E2A5 88B7 4C5C 98AA 9D3E]
0d4857c0bd9540f743afc22758a06c46?d=identicon&s=25 flex@programmareweb.com (Guest)
on 2013-11-06 17:51
(Received via mailing list)
> Cos a grandi linee:>
> - Controlla con `rake routes` come viene interpretato il percorso.
> - Controlla prima che tutto funzioni digitando a mano il percorso nella
> barra dell'indirizzo e dopo controlla che l'href sia quello che deve essere
> e non qualcos'altro.
>

ho provato,ma non e' un problema di routing, sembra che il parametro
shop_id non venga preservato dalla new alla create.
> se params[:shop_id]  null vuol dire che il routing non la interpreta bene.
> E' una nested resource per caso?



Non saprei dirti e' un id di una relazione has_many

--
FleX
[Linux User #347703 PGP Key ID: 98AA9D3E
FingerPrint: 7D25B 0CE4 898A 22CB F765  E2A5 88B7 4C5C 98AA 9D3E]
Dfa0e5f195b6f312006b465809b76b0b?d=identicon&s=25 Emanuele DelBono (Guest)
on 2013-11-06 17:55
(Received via mailing list)
Hai verificato che nella post/get nella request arrivi il dato?


2013/11/6 flex@programmareweb.com <flex@programmareweb.com>
0d4857c0bd9540f743afc22758a06c46?d=identicon&s=25 flex@programmareweb.com (Guest)
on 2013-11-06 18:00
(Received via mailing list)
On Wed, Nov 6, 2013 Luca  wrote:> immagino che apra una new che contiene
una form per creare un feedback, e
> che il relativo POST vada a finire nella create di quel controller.


Esatto
> la prima cosa che farei e' controllare dal log che tra i parametri passati
> alla create ci sia :shop_id

confermo, c'e'


> Se NON hai usato un routing in cui lo shop_id e' incluso nell'url, allora
> devi assicurarti che nella form presente nella pagina new ci sia un campo
> (nascosto) che lo contiene (e quando apri la pagina il campo nascosto deve
> avere il valore giusto


questa soluzione funziona !!!Ma non sarebbe meglio settare la variabile
nella new e poi richiamarla dalla create ?Mi chiedo perche' passarla
avanti e indietro alla view ?
Ho provato a fare diversamente aggiungendo alla create la seguente riga:

@feed = Feed.new(feed_params, :evaluated_shop => @feed.evaluated_shop)

ma non funziona.

> Altra cosa che mi pare da verificare: @feed.*evaluated_shop* =
> Shop.find(params[:shop_id])
> In feed immagino che ci sia un campo shop_id, e non magari
> evaluated_shop_id, giusto?


Esatto.
Grazie a te e agli alttri per avermi risolto il problema

--
FleX
[Linux User #347703 PGP Key ID: 98AA9D3E
FingerPrint: 7D25B 0CE4 898A 22CB F765  E2A5 88B7 4C5C 98AA 9D3E]
Fb4482bd900141ed8bd3f3fcc3723f90?d=identicon&s=25 Luca Mearelli (Guest)
on 2013-11-06 18:10
(Received via mailing list)
2013/11/6 flex@programmareweb.com <flex@programmareweb.com>

> e indietro alla view ?
>
>
il fatto e' che gli oggetti che crei durante l'esecuzione di una action
non
esistono piu' dopo che la action e' terminata, quindi non puoi creare
qualcosa nella new e ritrovarlo quando esegui la create. I dati devono
passare per il browser (via URL o parametri nelle form).
In alcuni casi puoi memorizzare nella sessione un dato che deve
persistere
attraverso diverse richieste (stando attento a non cercare di mantenere
in
sessione oggetti completi, ma solo ad esempio i loro id). Ma nel tuo
caso
non mi sembra necessario.

ciao,
Luca
0d4857c0bd9540f743afc22758a06c46?d=identicon&s=25 FleX (Guest)
on 2013-11-06 22:02
(Received via mailing list)
On 11/06/2013 06:09 PM, Luca Mearelli wrote:
> il fatto e' che gli oggetti che crei durante l'esecuzione di una action non
> esistono piu' dopo che la action e' terminata, quindi non puoi creare
> qualcosa nella new e ritrovarlo quando esegui la create. I dati devono
> passare per il browser (via URL o parametri nelle form).
> In alcuni casi puoi memorizzare nella sessione un dato che deve persistere
> attraverso diverse richieste (stando attento a non cercare di mantenere in
> sessione oggetti completi, ma solo ad esempio i loro id). Ma nel tuo caso
> non mi sembra necessario.

Ho capito, ed effettivamente non mi sembra il caso di metterla come var
di sessione.

--
FleX
[Linux User #347703 PGP Key ID: 98AA9D3E
FingerPrint: 7D25B 0CE4 898A 22CB F765  E2A5 88B7 4C5C 98AA 9D3E]
Please log in before posting. Registration is free and takes only a minute.
Existing account

NEW: Do you have a Google/GoogleMail, Yahoo or Facebook account? No registration required!
Log in with Google account | Log in with Yahoo account | Log in with Facebook account
No account? Register here.