problème de routes avec le edge

bonjour,

je suis en train de mettre à jour mes routes pour utiliser le edge,
mais depuis que j’utilise has_many ma deuxième route
“map.resources :faqs, :collection => { :search => :get }” ne marche
ne pluus

http://localhost:3000/faqs/search

ca me retourne une erreur 404

mon log

Processing FaqsController#show (for 192.168.1.66 at 2007-10-29
12:29:36) [GET]
Session ID: 88ac3fa2b208f48dbcd8a95df2d6c3d5
Parameters: {“action”=>“show”, “id”=>“search”, “controller”=>“faqs”}
Asked for a remote server ? nil, ENV[“FERRET_USE_LOCAL_INDEX”] is nil,
looks like we are not the server
Will use local index.
using index in /var/www/apps/wexpay/releases/20071025190205/index/
development/faq
default field list: [:questionfr, :reponsefr]
Faq Columns (0.002366)
SELECT
cols.COLUMN_NAME as ColName,
cols.COLUMN_DEFAULT as DefaultValue,
cols.NUMERIC_SCALE as numeric_scale,
cols.NUMERIC_PRECISION as numeric_precision,
cols.DATA_TYPE as ColType,
cols.IS_NULLABLE As IsNullable,
COL_LENGTH(cols.TABLE_NAME, cols.COLUMN_NAME) as Length,
COLUMNPROPERTY(OBJECT_ID(cols.TABLE_NAME), cols.COLUMN_NAME,
‘IsIdentity’) as IsIdentity,
cols.NUMERIC_SCALE as Scale
FROM INFORMATION_SCHEMA.COLUMNS cols
WHERE cols.TABLE_NAME = ‘questions’

SQL (0.000835) SELECT * FROM questions WHERE (questions.[id] = 0)
Rendering /var/www/apps/wexpay/releases/20071025190205/public/404.html
(404)
Filter chain halted as
[#<ActionController::Filters::ClassMethods::SymbolFilter:0xb70eda28
@filter=:find_faq>] rendered_or_redirected.
Completed in 0.01221 (81 reqs/sec) | Rendering: 0.00062 (5%) | DB:
0.00320 (26%) | 404 Not Found [http://beta.expay.local/faqs/search]

toutes mes routes

map.resources :faq_categories, :has_many => [:faq]
map.resources :faqs, :has_many => [:comments, :votes]

map.resources :pays_distributeurs,
:collection => { :sort => :put }

map.resources :distributeurs,
:name_prefix => ‘all_’,
:collection => { :search => :get }

map.resources :faqs, :collection => { :search => :get }

map.root :controller => “fr”
map.logout ‘/logout’, :controller => ‘sessions’, :action => ‘destroy’
map.activate ‘/activate’, :controller => ‘users’, :action =>
‘activate’
map.index ‘’, :controller => “fr”, :action => “index”

merci

Bolo :

Parameters: {“action”=>“show”, “id”=>“search”, “controller”=>“faqs”}

T’as un indice
là.
– Jean-François.


Ruby ( http://www.rubyfrance.org ) on Rails ( http://www.railsfrance.org
)

oui tu as raison mon formulaire pause problème

<% form_for(:faq,:url => search_faqs_path, :html => { :method

=> :get }) do |f| %>
<%= text_field_tag :q, params[:q], :size => 50, :id
=> :search_box %>
<%= submit_tag ‘trouvez une réponse’ %>
<img src="/images/spinner_petit.gif"alt=“Spinner”
id=“map_indicator” style=“display: none;” />
<% end %>

ca me genère ca

<form action="/faqs/search" method="get">
      <input id="search_box" name="q" size="65" type="text" />
  <input name="commit" type="submit" value="trouvez une réponse" />
  <img src="/images/spinner_petit.gif"alt="Spinner"

id=“map_indicator” style=“display: none;” />

   </form>

quand je clique sur le bouton ca tomme sur ca

http://beta.expay.local/faqs/search?q=00&commit=trouvez+une+réponse

Je sais pas pourquoi le bouton à valeur name

Bolo :

oui tu as raison mon formulaire pause problème

Non, je ne pense pas que ton formulaire pose problème.

Ici, tu peux reproduire le bug de ton appli “à la main” (avec
wget/curl/ruby…)

            <% form_for(:faq,:url => search_faqs_path, :html => { :method

=> :get }) do |f| %>
<%= text_field_tag :q, params[:q], :size => 50, :id
=> :search_box %>
<%= submit_tag ‘trouvez une réponse’ %>
<img src="/images/spinner_petit.gif"alt=“Spinner”
id=“map_indicator” style=“display: none;” />
<% end %>

C’est plutôt un problème annexe : je ne comprends pas que vient faire
ici form_for.

– Jean-François.


Ruby ( http://www.rubyfrance.org ) on Rails ( http://www.railsfrance.org
)

Bolo :

Ca pointe vers la méthode show :frowning: Peut être que je teste pas la bonne
url

C’est une hypothèse, mais pour moi ce n’est pas la bonne.
Pour la valider ou l’invalider, tu peux par exemple demander à
Rails de t’indiquer quelle est cette bonne url.

– Jean-François.


Ruby ( http://www.rubyfrance.org ) on Rails ( http://www.railsfrance.org
)

alors j’ai donc lancé un rake routes pour être sure

http://pastie.caboo.se/113429

donc on voit bien que url faq/serch doit pointer sur l’action Search
lorsque que c’est un GET

et même temps j’ai cette routes

faq GET /faqs/:id
{:controller=>“faqs”, :action=>“show”}

et j’ai l’impression que les routes pause problèmes

dans les logs on voit bien que Rails considère search comme un id

Processing FaqsController#show (for 127.0.0.1 at 2007-10-31 20:49:00)
[GET]
Session ID: 5ba18bb97e2175bf4b6c0886f730fce2
Parameters: {“action”=>“show”, “id”=>“search”, “q”=>“00”,
“controller”=>“faqs”}

Tu a deux “map.resources :faqs” : map.resources :faqs, :has_many =>
[:comments, :votes] et map.resources :faqs, :collection => { :search
=> :get }

Essaie en en fesant qu’une : map.resources :faqs, :has_many =>
[:comments, :votes], :collection => { :search => :get }

++

Le 29 oct. 07 à 13:00, Bolo a écrit :

Avec curl j’ai le même problème

curl -G “http://beta.expay.local/faqs/search?q=00

Processing FaqsController#show (for 127.0.0.1 at 2007-10-31 20:49:00)
[GET]
Session ID: 5ba18bb97e2175bf4b6c0886f730fce2
Parameters: {“action”=>“show”, “id”=>“search”, “q”=>“00”,
“controller”=>“faqs”}
Asked for a remote server ? nil, ENV[“FERRET_USE_LOCAL_INDEX”] is nil,
looks like we are not the server
Will use local index.
using index in /var/www/apps/wexpay/releases/20071030184840/index/
development/faq
default field list: [:questionfr, :reponsefr]

Ca pointe vers la méthode show :frowning: Peut être que je teste pas la bonne
url

Jordan :

Tu a deux “map.resources :faqs” : map.resources :faqs, :has_many =>
[:comments, :votes] et map.resources :faqs, :collection => { :search
=> :get }

Essaie en en fesant qu’une : map.resources :faqs, :has_many =>
[:comments, :votes], :collection => { :search => :get }

Le but était que Bolo arrive à débugger son problème et à comprendre
la cause du problème, pas à lui donner la solution toute faite.
Si elle veut utiliser (et mieux maîtriser) Edge, il faut qu’elle gagne en
autonomie et débrouillardise.

– Jean-François.


Ruby ( http://www.rubyfrance.org ) on Rails ( http://www.railsfrance.org
)

Bolo :

donc on voit bien que url faq/serch doit pointer sur l’action Search
lorsque que c’est un GET

et même temps j’ai cette routes

faq GET /faqs/:id
{:controller=>“faqs”, :action=>“show”}

et j’ai l’impression que les routes pause problèmes

Donc finalement, on est d’accord sur un début de diagnostic,
ce n’est pas un problème de formulaire, ce n’est pas une url
qui est fausse, on a deux routes qui posent problème :
GET /faqs/search et GET /faqs/:id

dans les logs on voit bien que Rails considère search comme un id

Tout à fait, qu’est-ce qui se passe en fait ?

Processing FaqsController#show (for 127.0.0.1 at 2007-10-31 20:49:00)
[GET]
Session ID: 5ba18bb97e2175bf4b6c0886f730fce2
Parameters: {“action”=>“show”, “id”=>“search”, “q”=>“00”,
“controller”=>“faqs”}

Maintenant, comment on fait pour trouver la cause de ce problème ?

– Jean-François.


Ruby ( http://www.rubyfrance.org ) on Rails ( http://www.railsfrance.org
)

mince alors était tout contente de dire que j’avais enfin compris d’ou
venait mon erreur.
Il y avait une route de trop, d’où la confusion dans rails et j’etait
arrivée à la même conclusion

map.resources :faqs, :has_many => [:comments, :votes], :collection =>
{ :search => :get }

Merci JF