Кнопка "Мне нравится" для пользователей с ежедневными постами, не обновляющимися с помощью AJAX

Я передаю коллекцию (@feed_items) частичке _feed_item через параметр:collection и преобразую ее в dailypost с помощью:as =>:dailypost.

Внутри части _feed_item я рендерил другую часть для _like_button, и я использовал:localals для продолжения использования dailypost.

Все отлично работает с базой данных. Любит добавляются и выносятся:) НО

Я пытаюсь использовать (AJAX) через toggle.js.erb, чтобы нравится или не нравится. По некоторым причинам, он не обновляется правильно, и мне приходится обновлять страницу каждый раз. Какие-либо предложения???

МОДЕЛИ

class Like < ActiveRecord::Base
  attr_accessible :dailypost_id, :user_id
  belongs_to :user
  belongs_to :dailypost

  default_scope order: 'likes.created_at DESC'
end

Контроллеры

likes_controller.rb

class LikesController < ApplicationController

  respond_to :html, :js

def create
  @like = Like.create(params[:like])
  @dailypost = @like.dailypost
  render :toggle
end

def destroy
  like = Like.find(params[:id]).destroy
  @dailypost = like.dailypost
  puts "----------------like destroyed"
  render :toggle
end

end

Просмотры

_feed.html.erb

<% if @feed_items.any? %>
  <ol class="dailyposts postusers">
    <%= render partial: 'shared/feed_item', collection: @feed_items, :as => :dailypost %>
  </ol>
  <%= will_paginate @feed_items %>
<% end %>

_feed_items.html.erb

<li id="<%= dailypost.id %>">

  <span class="user">
    <%= link_to dailypost.user.name, dailypost.user %>
    <%= link_to dailypost.id %>
  <span class="content"><%= dailypost.content_html %></span>

  <div id="like">
    <%= render :partial => 'likes/like_button', :locals =>{:dailypost => dailypost} %>
  </div>

</li>

_like_button.html.erb

<% if like = current_user.likes.find_by_dailypost_id(dailypost.id) %>
 <%= form_for like, :html => { :method => :delete }, :remote => true do |f| %>
   <%= f.submit "Unlike" %>
 <% end %>
<% else %>
 <%= form_for current_user.likes.build, :remote => true do |f| %>
  <div><%= f.hidden_field :dailypost_id, value: dailypost.id %></div>
  <%= f.hidden_field :user_id %>
  <%= f.submit "Like" %>
 <% end %>
<% end %>

toggle.js.erb

$("#like").html("<%= escape_javascript(render :partial => 'like_button', :locals => {:dailypost => @dailypost}) %>");

БАЗА ДАННЫХ

ActiveRecord::Schema.define(:version => 20130210095553) do

create_table "dailyposts", :force => true do |t|
  t.string   "content"
  t.string   "content_html"
  t.integer  "user_id"
  t.datetime "created_at",         :null => false
  t.datetime "updated_at",         :null => false
end

add_index "dailyposts", ["user_id", "created_at"], :name => "index_dailyposts_on_user_id_and_created_at"

create_table "likes", :force => true do |t|
  t.integer  "dailypost_id"
  t.integer  "user_id"
  t.datetime "created_at",   :null => false
  t.datetime "updated_at",   :null => false
end

create_table "users", :force => true do |t|
  t.string   "name"
  t.string   "email"
  t.datetime "created_at",                                :null => false
  t.datetime "updated_at",                                :null => false
  t.string   "password_digest"
  t.string   "remember_token"
  t.boolean  "admin",                  :default => false
end

add_index "users", ["email"], :name => "index_users_on_email", :unique => true
add_index "users", ["remember_token"], :name => "index_users_on_remember_token"

end

1 ответ

Решение

Похоже, что ваша форма неправильно устанавливает dailypost_id, попробуйте изменить форму с:

<%= form_for(current_user.likes.build(dailypost_id: @dailypost.id), remote: true) do |f| %>
    <%= f.hidden_field :dailypost_id %>

чтобы:

<%= form_for(current_user.likes.build, remote: true) do |f| %>
    <%= f.hidden_field :dailypost_id, value: @dailypost.id %>
Другие вопросы по тегам