11

Ho ricevuto una piccola domanda da principiante. Sto cercando di passare una variabile dalla mia vista al mio controller. C'è comunque il mio metodo nel mio controller in grado di ricevere variabili dal mio punto di vista?Passare i parametri dalla vista al controller

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 

Grazie in anticipo :)

+0

si potrebbe usare l'hash 'params' ... – Jon

+0

dipende il tipo di variabile. non puoi passare oggetti al controller. puoi passare semplici param che lo definiscono in un tag nascosto – adcosta

+0

In realtà voglio solo cambiare un id nel mio modello con l'id corrente di quella pagina. La mia pagina ha un ID, ecco perché sto cercando di passare in quel modello. Se voglio passare un parametro dalla mia pagina e salvarlo nel mio modello di post (con il mio post controller). Come potrei farlo? Qualcosa come "clicca questo link" e questo cambierà l'id. <% = link_to "Change id",: method => add_relationship, params [: rel_current_id = @ rela.id] – OXp1845

risposta

23

È possibile aggiungere informazioni all'hash params attraverso il link_to. Non sono sicuro di quello che si sta cercando di fare, ma ho fatto qualcosa di simile di recente per aggiungere il tipo di email che volevo quando ho collegamento alla nuova e-mail

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

Ora i miei params assomiglia:

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

posso accedere al tipo attraverso i params

email_type = params[:type] 

Invece di una stringa, se si passa nell'istanza @rela variabile si otterrà l'object_id nel hash params.

Per il commento qui sotto, io sono l'aggiunta miei percorsi di mostrare perché il percorso new_invoice_email_path funziona:

resources :invoices do 
    resources :emails 
end 
+0

Sì, questo è qualcosa che sto cercando per. New_invoice_email_path è il tuo controller o metodo? Pfft, ho davvero bisogno di saperne di più su questo. Sono più abituato a JAVA che a ruby ​​... – OXp1845

+0

questo percorso mi porta al controller di posta elettronica, nuova azione. L'e-mail è una rotta nidificata per la fattura, aggiungerò i miei percorsi alla mia risposta sopra – Steve

+0

apri un prompt dei comandi e digita 'rake routes' per vedere quali percorsi definiti hai. Ti dice anche a quale controller e azione si associa. –

2

Quando arriva una richiesta, il controllore (e chiamate modello) vengono elaborati per primi e poi il codice vista viene processato ultimo. La vista può chiamare metodi negli helper, ma non può fare riferimento alle funzioni nel controller.

Tuttavia, una volta visualizzata una pagina, è possibile reinserire le informazioni sul controller come parte di una nuova richiesta o utilizzare ajax/JQuery (ecc.) Per effettuare una chiamata a una funzione del controller in remoto.

Questo aiuto?

+0

Scusate, ajax è un po 'complesso per me :) – OXp1845

Problemi correlati