Utilizzando Ajax per sostituire un elemento pagina Sulla base di un evento Onclick
-
13-09-2019 - |
Domanda
Sono riformulare questa domanda come io sto capendo il problema meglio ora.
Ho una domanda con quattro modelli: gli utenti, i prodotti, varietà e stagioni.
utente
has_many :seasons
has_many :products, :through => :seasons
has_many :varieties, :through => :seasons
prodotto
has_many :seasons
has_many :users, :through => :seasons
has_many :varieties
Varietà
belongs_to :product
has_many :seasons
has_many :users, :through => :seasons
Stagioni
belongs_to :product
belongs_to :user
belongs_to :variety
In vista del prodotto / spettacolo, elencare ogni varietà disponibile per un determinato prodotto, e gli utenti che portano quel particolare prodotto.
Quando il prodotto / spettacolo pagina viene caricata, ho visualizzare tutti gli utenti che portano il prodotto in questo modo:
<% @product.seasons.each do |c| %>
<%= link_to c.user.name, c.user %>
<% end %>
Ho anche elencare le varietà disponibili per il prodotto in questo modo:
<% @product.varieties.each do |c| %>
<%= link_to_remote variety.name, :url => variety_path(variety) %>
<% end %>
Ecco dove l'Ajax deve accadere. Quando clicco su un nome di varietà, voglio sostituire il loop @ product.seasons con @ variety.seasons. Penso che questo dovrebbe solo visualizzare solo gli utenti che dispongono di quella particolare varietà. In modo che sarebbe simile a questa:
<% @variety.seasons.each do |c| %>
<%= link_to c.user.name, c.user %>
<% end %>
Mi sto avvicinando, ma non riesco a farlo funzionare. Attualmente, quando si fa clic su una varietà, non succede nulla sul frontend. Nel registro, ottengo questo:
Processing VarietiesController#4 (for ip at 2009-09-24 16:02:29) [POST]
Parameters: {"authenticity_token"=>"9pDgKrHNbg0aMklsQsGl5BQa34bfr0Ft8Fpbxki3XXw="}
ActionController::UnknownAction (No action responded to 4. Actions: check_vendor_role, index, and show)
Il registro si riferisce a 4 # e si riferisce a 4 come un'azione. 4 è l'ID varietà della voce che ho cliccato su.
Ecco la mia messa a punto:
ProductsController # show
@product = Product.find (params [: id])
@varieties = @ product.varieties
@users = @ product.users
prodotto / spettacolo vista #Lists gli utenti che dispongono di questo prodotto
<div id="userList">
<%= render :partial => "products/users" %>
</div>
#Lists the varieties available for this product
<% @product.varieties.each do |variety| %>
<%= link_to_remote variety.name, :url => variety_path(variety) %>
<% end %>
VarietiesController # show.
def show
@variety = Variety.find(params[:id])
respond_to do |format|
format.html
format.xml { render :xml => @variety}
format.js
end
end
varietà / show.js.rjs
@ Page.replace_html "userList",: parziale => "prodotti / utenti",: collection => @ variety.users
Quindi, attualmente, la pagina viene rendering e la visualizzazione del corretto html e dati. Ma l'onclick non funziona. Quando scatto una varietà, l'app non elabora correttamente la richiesta e l'elenco degli utenti non cambia.
Aggiornamento
Risposta al commento di Anatoliy:
Non so esattamente quale strada deve essere aggiunto. Ho provato ad aggiungere quanto segue, ma il risultato era lo stesso di prima:
map.resources: varietà, membro: => {: spettacolo =>: ottenere}
Potrebbe essere più preciso circa quale strada membro dovrebbe essere chiamato?
Soluzione
Come indicato nei commenti (che dovrebbero essere elencati come una risposta):
Aggiungi: method =>:. Arrivare la chiamata link_to_remote di utilizzare la corretta verb HTTP per "show" contro tale URL
Altri suggerimenti