Parametri submit

Scusate se apro molti topic…

pensavo che il mio problema fosse sul link to e invece giustamente per
toccare il db c’entra sempre il submit…

submit accetta parametri particolari per cambiare controller?

mi spiego con il solito esempio… ho un client con N games

sono nella pagina dell’utente pinco pallino e clicco su un link che mi
porta alla visualizzazione di tutti i games (la index di games) con l’id
del cliente appresso…

ora nella vista di tutti i games (index) ho i link a edit, show e
destroy…

ecco la vista index di game:

Listing games

<% @games.each do |game| %>

<td><%= link_to 'Show', game %></td>
<td><%= link_to 'Edit', edit_game_path(game) %></td>
<td><%= link_to 'Destroy', game, :confirm => 'Are you sure?',

:method=> :delete %>

<% end %>
Name client
<%=h game.name %> <%=h game.client_id %> <% form_for(game) do |f| %> <%= f.error_messages %>

<%= f.submit 'PROVA' %>

<% end %>

il problema è che la submit andrebbe al controller games ma al metodo
index… io invece vorrei che andasse a un metodo mio (diciamo ADD) o un
altro… anche edit mi andrebbe bene, tanto sto uscendo pazzo e mi
accontento di qualsiasi cosa :slight_smile:

vorrei cioè associare + games a un certo client vedendo tutti i games
presenti…

grazie

PS so già che il problema successivo sarà che ogni singolo game potrà
essere associato a un singolo client per volta… ma la cosa la dovrei
risolvere con un altra classe che gestisce la lista di games… ma non
c’entra con il mio problema attuale…

grazie a tutti :slight_smile:

Forse con un approccio pi RESTfull risolvi.

Hai pensato di aggiungere un model/controller/vierw che si occupi di
gestire questo caso senza andare nella index di games? Praticamente ti
trovi con un controller con tutti i verbi REST liberi e pronti per
essere
usati per gestire il caso, puoi decide di persistere le informazioni per
tracciare l’operazione, gestirla modificandola od eliminandola senza
andare
ad intaccare la RESTfiullness :smiley: in altri controller.

Riccardo L. wrote in post #1039122:

Forse con un approccio pi RESTfull risolvi.

Hai pensato di aggiungere un model/controller/vierw che si occupi di
gestire questo caso senza andare nella index di games? Praticamente ti
trovi con un controller con tutti i verbi REST liberi e pronti per
essere
usati per gestire il caso, puoi decide di persistere le informazioni per
tracciare l’operazione, gestirla modificandola od eliminandola senza
andare
ad intaccare la RESTfiullness :smiley: in altri controller.

eeeemh… beh… che dire… per ora grazie…

non so cosa sia RESTfull ma vedo di documentarmi… sperando di
risolvere…

grazie

Silvio Dell’Oste wrote in post #1039129:

Riccardo L. wrote in post #1039122:

Forse con un approccio pi RESTfull risolvi.

Hai pensato di aggiungere un model/controller/vierw che si occupi di
gestire questo caso senza andare nella index di games? Praticamente ti
trovi con un controller con tutti i verbi REST liberi e pronti per
essere
usati per gestire il caso, puoi decide di persistere le informazioni per
tracciare l’operazione, gestirla modificandola od eliminandola senza
andare
ad intaccare la RESTfiullness :smiley: in altri controller.

eeeemh… beh… che dire… per ora grazie…

non so cosa sia RESTfull ma vedo di documentarmi… sperando di
risolvere…

grazie

mmm… mi sa che si tratta di rails 3… che per ora non tocco…
perchè? perchè devo cercare di capire come funziona tutto l’ambaradan…
e vorrei usare meno “magia” possibile…

insomma farei volentieri a meno dei vari moduli che fanno cose
magicamente inizialmente… per poi usarli quando capisco quasi tutto…

mi pare strano pensare che un submit debba dipendere per forza dalla
vista comunque… nel senso che se io faccio un submit non vedo perchè
nel conroller devo per forza chiamare il metodo che ha il nome della
pagina di provenienza :frowning:

2012/1/2 Silvio Dell’Oste [email protected]

Silvio Dell’Oste wrote in post #1039129:

mi pare strano pensare che un submit debba dipendere per forza dalla
vista comunque… nel senso che se io faccio un submit non vedo perch
nel conroller devo per forza chiamare il metodo che ha il nome della
pagina di provenienza :frowning:

Sono le convetions di Rails, ma in genere le puoi modificare via named
params sul sull’helper della form

On 31 December, 2011, at 16:04, Silvio Dell’Oste wrote:

<% form_for(game) do |f| %>
<%= f.error_messages %>

<%= f.submit 'PROVA' %>

<% end %>

Prova cos:

In routes.rb definisci la tua azione custom e assicurati che abbia un
nome.

match ‘games/add’ => ‘games#add’, :as => ‘add_game’

Poi da terminale fai
rake routes
per controllare che sia stata registrata correttamente e abbia il nome
desiderato.

Poi cambia il tag form_for:
<% form_for(game, :url => add_game_path) do |f| %>

Cos la action della form dovrebbe puntare alla tua azione custom.

Almeno su Rails 3 tutto questo dovrebbe pi o meno fare quello che
desideri, fammi sapere se va bene anche per il 2 :slight_smile:

Alessandro

Alessandro M. wrote in post #1039134:

On 31 December, 2011, at 16:04, Silvio Dell’Oste wrote:

<% form_for(game) do |f| %>
<%= f.error_messages %>

<%= f.submit 'PROVA' %>

<% end %>

Prova cos:

In routes.rb definisci la tua azione custom e assicurati che abbia un
nome.

match ‘games/add’ => ‘games#add’, :as => ‘add_game’

Poi da terminale fai
rake routes
per controllare che sia stata registrata correttamente e abbia il nome
desiderato.

Poi cambia il tag form_for:
<% form_for(game, :url => add_game_path) do |f| %>

Cos la action della form dovrebbe puntare alla tua azione custom.

Almeno su Rails 3 tutto questo dovrebbe pi o meno fare quello che
desideri, fammi sapere se va bene anche per il 2 :slight_smile:

Alessandro

purtroppo rake aborted!
undefined method `match’ for main:Object

sei comunque gentilissimmo, grazie Alessandro :slight_smile:

vorrei chiedere un altra cosa… credo di non passare bene i
parametri…

mi spiego…

o con games o con address non fa differenza… faccio l’esempio client
che è in relazione 1:1 (has_one) address…

nella pagina di modifica client ho un link_to…

<%= link_to “edit address”, :action => “edit”, :controller =>
“addresses”, :id => @client.address.id %>

che pensavo di aver scritto male… scrivo quindi…
<%= link_to “edit address”, :action => “edit”, :controller =>
“addresses”, :client_id => @client.address.id %>

ma succede una cosa strana… nel senso che se scrivo il codice come
prima o senza proprio :id => … vado nel controller addresse all’azione
ediit e vado all’indirizzo diciamo giusto da modificare… se uso la
seconda istruzione vado all’indirizzo sbagliato…

esempio: client con id 2 associato a address con id 3 (client_id
dovrebbe essere 2)

col primo codice vado a …/addresses/3/edit, col secondo a
…/addresses/2/edit?client_id=3, cioè inverte gli id… insomma direi
che non passo bene i parametri :frowning: