2016-09-30 1 views
0

Ich versuche, eine Schaltfläche Klasse mit einem Upvote und Downvote ändern und versuchen, die integrierte AJAX-Funktionalität dafür zu verwenden. Ich denke, dass alles da ist, aber wenn man es ausführt, fehlt immer noch eine bestimmte Ansicht.Ersetzen Teil mit AJAX in Rails 4 kann meine Ansicht nicht finden

models/oneliner.rb

has_many :general_connections 
has_many :users, through: :general_connections 

models/general_connection.rb

belongs_to :oneliner 
belongs_to :user 

models/user.rb

has_many :general_connections 
has_many :oneliners, through: :general_connections 

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/oneliners/index.html.erb

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

views/oneliners/_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> 

ansichten/general_connection/like_oneliner.js.erb

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

dergleichen, und im Gegensatz zu Methoden tun funktioniert, aber ich die folgende Fehlermeldung erhalten:

ActionView::Template::Error (undefined local variable or method `oneliner' for #<#<Class:0x007fe4f15056a8>:0x007fe4f5408eb8>): 
1: $('#<%= dom_id(oneliner) %>').replaceWith(<%= j render partial: 'oneliners/list', locals: {oneliner: oneliner} %>"); 
app/views/general_connection/like_oneliner.js.erb:1:in `_app_views_general_connection_like_oneliner_js_erb___1501586799937634897_70310671877500' 
app/controllers/general_connection_controller.rb:7:in `like_oneliner' 

Kann mir jemand helfen?

Update: verändert die controller und .js.erb Abschnitte nach ein paar Tipps von user4382423

Antwort

0

dergleichen, und im Gegensatz zu Methoden tun funktioniert, aber ich bin immer folgende Fehlermeldung:

> ActionView::MissingTemplate (Missing template 
> general_connection/like_oneliner, application/like_oneliner with 
> {:locale=>[:en], :formats=>[:js, :html], :variants=>[], 
> :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :arb, :jbuilder]}. 

Ihre Vorlage muss in sein general_connection ordner nicht in general_connections

+0

Hoppla, ja, habe ich verpasst. Aber es funktioniert immer noch nicht. Der neue Fehler ist: 'ActionView :: Template :: Fehler (undefinierte lokale Variable oder Methode" oneliner "für # <# : 0x007fe4f7a2a2b8>): 1: $ (" # <% = dom_id (oneliner)%> ". replaceWith (<% = j render teilweise:" oneliner/list ", lokal: {oneliner: oneliner}%>"); app/ansichten/general_connection/like_oneliner.js.erb: 1: in " _app_views_general_connection_like_oneliner_js_erb___1501586799937634897_70310691947700" app/controllers/general_connection_controller.rb: 7: in "like_oneliner" ' –

+0

es, weil oneliner lokale Variable ist, sollten Sie es zum Beispiel variablen ändern .. zB @oneliner und Einheimische ändern: {oneliner: oneliner} Einheimische : {oneliner: @oneliner} .. und das funktioniert für dich :) – user9392255

+0

Ich habe die '.js geändert."Local: {Oneliner: @oneliner}", aber ich bekomme immer noch den gleichen Fehler. –

Verwandte Themen