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
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" ' –
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
Ich habe die '.js geändert."Local: {Oneliner: @oneliner}", aber ich bekomme immer noch den gleichen Fehler. –