web-dev-qa-db-fra.com

Passer des paramètres de la vue au contrôleur

J'ai une petite question de débutant. J'essaie de passer une variable de ma vue à mon contrôleur. Existe-t-il de toute façon que ma méthode dans mon contrôleur peut recevoir des variables de ma vue?

Post view: show.html.erb:
....
<%=link_to "Add relationship", :method => :add_relationship(@rela) %>

Controller: post.controller.rb:

 def add_relationship(rela)
  @post = Post.find(params[:id])

  if current_user.id == @post.user_id
    @post.rel_current_id = rela.id
    @post.save
    redirect_to relationships_url
  else
    redirect_to posts_url, :notice => "FY!"
  end
end

Merci d'avance :)

13
OXp1845

Vous pouvez ajouter des informations au hachage des paramètres via le lien_to. Je ne sais pas exactement ce que vous essayez de faire, mais j'ai fait quelque chose comme ça récemment pour ajouter le type d'e-mail que je voulais quand je crée un lien vers le nouvel e-mail

<%= link_to 'Send Thanks', new_invoice_email_path(@invoice, :type => "thanks") %>

Maintenant, mes paramètres ressemblent à:

{"type"=>"thanks", "action"=>"new", "controller"=>"emails", "invoice_id"=>"17"}

Je peux accéder au type via les paramètres

email_type = params[:type]

Au lieu d'une chaîne, si vous passez la variable d'instance @rela, vous obtiendrez le object_id dans le hachage params.

Par le commentaire ci-dessous, j'ajoute mes itinéraires pour montrer pourquoi le chemin new_invoice_email_path fonctionne:

resources :invoices do
  resources :emails
end
27
Steve

Lorsqu'une demande arrive, le contrôleur (et tous les appels de modèle) sont traités en premier, puis le code d'affichage est traité en dernier. La vue peut appeler des méthodes dans les assistants, mais ne peut pas référencer des fonctions dans le contrôleur.

Cependant, une fois qu'une page est rendue, vous pouvez soit renvoyer des informations au contrôleur dans le cadre d'une nouvelle demande, soit utiliser ajax/JQuery (etc.) pour appeler à distance une fonction de contrôleur.

Est ce que ça aide?

2
Chris Lewis