2016-10-07 2 views
0

Für die folgenden bekomme ich keine Fehler und meine Liste-Teil wird wieder nach dem Ausführen der like_oneliner-Methode geladen. Die geänderten Daten (oneliner.users.count und if/else für !joined(oneliner) werden nicht aktualisiert) werden nicht angezeigt.Ersetzen Teil mit AJAX in Rails 4: keine Fehler und keine aktualisierten Daten

Ich versuche, eine Schaltfläche Klasse mit einem Upvote und Downvote ändern und versuchen, die integrierte AJAX-Funktionalität dafür zu verwenden.

models/campaign.rb

belongs_to :user 
has_many :oneliners 
has_many :general_connections 

models/oneliner.rb

has_many :general_connections 
has_many :users, through: :general_connections 
belongs_to :campaign 

models/general_connection.rb

belongs_to :oneliner 
belongs_to :user 
belongs_to :campaign 

Modelle/user.rb

has_many :general_connections 
has_many :oneliners, through: :general_connections 
has_many :campaigns 

Controller/general_connection.rb

def like_oneliner 
    @oneliner = Oneliner.find(params[:oneliner_id]) 
    current_user.general_connections.create(oneliner: @oneliner) 
    respond_to do |format| 
    format.html { redirect_to :back } 
    format.js 
    end 
end 

def unlike_oneliner 
    @general_connection = GeneralConnection.where("oneliner_id = ? AND user_id = ?", params[:oneliner_id], current_user.id).first 
    @oneliner = @general_connection.oneliner 

    @general_connection.destroy 
    respond_to do |format| 
    format.html { redirect_to :back } 
    format.js 
    end 
end 

views/Kampagnen/show.html.erb

<div class="row"> 
    <ul class="collection"> 
     <% @oneliners.each do |oneliner| %> 
      <%= render partial: 'oneliners/list', locals: { oneliner: oneliner } %> 
     <% end %> 
    </ul> 
</div> 

views/oneliner/_list.html.erb

<li class="collection-item avatar"> 
    <i class="circle black"><%= oneliner.users.count %></i> 
    <span class="title"><%= oneliner.title %></span> 
    <p><%= timeago_tag oneliner.created_at, :nojs => true, :limit => 100.days.ago %>/<%=t 'list.employee' %><%= oneliner.user.name %> 
    </p> 

    <% if !joined(oneliner) %> 
    <%= form_tag(onelinerlike_path, remote: true) do %> 
     <%= hidden_field_tag 'oneliner_id', oneliner.id %> 
     <%= button_tag 'thumb_up', id: "#{ dom_id(oneliner) }", class: "secondary-content material-icons grey-text", style: "background-color:white;border:none;" %> 
    <% end %> 
    <% else %> 
    <%= form_tag(onelinerunlike_path, remote: true) do %> 
     <%= hidden_field_tag 'oneliner_id', oneliner.id %> 
     <%= button_tag 'thumb_up', id: "#{ dom_id(oneliner) }", class: "secondary-content material-icons orange-text", style: "background-color:white;border:none;" %> 
    <% end %> 
    <% end %> 
</li> 

views/general_connection/like_oneliner.js.erb

$('#<%= dom_id(@oneliner) %>').replaceWith(<%= j render partial: 'oneliners/list', locals: {oneliner: @oneliner} %>"); 

dergleichen, und im Gegensatz zu Methoden Werke tun, und ich sehe eine kleine Änderung in der Timeago string (Es ändert sich beispielsweise aus 2 months in 2 months ago), aber das ist es. Die oneliner.users.count und die if/else für !joined(oneliner) zeigen nur die neuen Daten, wenn ich die Seite aktualisiere.

Kann mir jemand helfen?

+0

'$ ('# <% = dom_id (@oneliner)%>')' dies gibt ein Button-Element, das Sie ersetzen. Sie sollten das ganze Teil ersetzen, indem Sie seine ID/Klasse angeben. –

+0

Ja, das war ein großer Teil davon, und es führte zu der Schlussfolgerung, dass ich versuchte, zu geben "teilweise rendern:" und id, anstelle der partiellen selbst. Es ist gelöst, danke! Kannst du das Obige in eine Antwort setzen, damit ich es annehmen kann? –

+0

Würde mich freuen :) –

Antwort

0

$('#<%= dom_id(@oneliner) %>') Dies gibt ein Tastenelement, das Sie ersetzen. Sie sollten das ganze Teil ersetzen, indem Sie seine ID/Klasse angeben.

Verwandte Themen