2014-09-04 1 views
2

j'ai passé une valeur dans une page de recherche par -Rails - passant des paramètres arbitraires dans la recherche

<%= link_to 'add', users_path(bookto: @book.id) %> 

dans la vue et

@book = Book.find_by_id(params[:bookto]) 

dans l'action du contrôleur de réception.

J'ai un formulaire de recherche dans mon récepteur (index) vue

<%= form_tag users_path(params[bookto: @book.id]), method: 'get' do %> 
    <p> 
    <%= text_field_tag :search, params[:search] %> 
    <%= submit_tag "Search", name: nil %> 
    </p> 
<% end %> 

<%= "#{@book.id}, #{@book.title}" %> 

<% if @users %> 
    <%= render partial: 'layouts/showusers', locals: {users: @users} %> 
<% end %> 

Quand je navigue jusqu'à la page

http://localhost:3000/users?bookto=1 

La valeur de @book est passé correctement. Toutefois, lorsque j'effectue une recherche, le paramètre n'est pas transmis à

http://localhost:3000/users?utf8=✓&search=mysearch 

Je ne transmets pas le paramètre. Je ne veux pas utiliser ce paramètre arbitraire dans la recherche, je veux juste qu'il soit disponible pour que je l'utilise une fois la recherche terminée. Comment puis-je y parvenir? Dois-je ajouter une action de recherche à mon contrôleur?

+1

Si rien d'autre, vous voudrez probablement utiliser '@ book.id' comme paramètre, pas la représentation de chaîne du livre. Comment est rendu le lien? –

+0

Salut - bon point sur @ book.id, j'ai fait ce changement et mettra à jour la question. Quand je lance la recherche, il tombe avec 'ActiveRecord :: RecordNotFound dans UsersController # index Impossible de trouver Book sans ID' - merci, Dan – RADan

+2

Ce n'est pas vraiment votre problème, mais il est toujours plus sûr de dire '@book = Livre .find_by_id (params [: bookto]) 'plutôt que' @book = Book.find (params [: bookto]) ': le premier mettra @book à zéro s'il ne trouve pas de livre, ce dernier explose. –

Répondre

2

Pourquoi ne pas ajouter simplement un champ caché dans votre moteur de recherche comme celui-ci

<%= form_tag users_path, method: 'get' do %> 
    <p> 
    <%= hidden_field_tag :bookto, @book.id %> 
    <%= text_field_tag :search, params[:search] %> 
    <%= submit_tag "Search", name: nil %> 
    </p> 
<% end %> 

Parce que vous voulez voir bookid dans votre URL de toute façon, cette méthode est ok dans votre cas.

+0

Merci, cela semble le faire - et ai-je raison de penser que le contrôleur prend la valeur? – RADan

+0

@RADan ne sais pas ce que vous voulez dire. Les params seront transmis au contrôleur et vous pouvez obtenir la valeur via l'objet 'params' –

+0

Yep, got it, cheers :) – RADan

Questions connexes