2014-10-28 2 views
1

Я пытаюсь реализовать форму follow/unfollow для создания/уничтожения отношений между пользователем и компанией на сайте. У меня возникли проблемы рендеринга новый частичный по форме представить, чтобы изменить кнопку отношения с «следовать» в «неследовать»Ajax форма не оказывает частичное

В настоящее время я сделать другое частичное в зависимости от того, или нет, уже существует взаимосвязь:

`<% unless current_user.id == @company.user_id %> 
<div id="#relationship"> 
    <% if current_user.following?(@company) %> 
     <%= render :partial => 'unfollow' %> 
    <% else %> 
     <%= render :partial => 'follow' %> 
    <% end %> 
    </div> 
<% end %>` 

следует частичному выглядит как:

<%= form_for(current_user.relationships.build(followed_id: @company.id), remote: true) do |f| %> 
    <div><%= f.hidden_field :followed_id %></div> 
    <%= f.submit "Follow",class: "btn-transparent btn-hollow btn-huge" %> 
<% end %> 

Хотя Перестать частичные выглядит как:

<%= form_for(current_user.relationships.find_by(followed_id: @company.id), html: { method: :delete }, remote: true) do |f| %> 
    <%= f.submit "Unfollow", class: "btn-transparent btn-hollow btn-huge" %> 
<% end %> 

Они используют Создание и уничтожить методы в моем Relationships_Controller:

class RelationshipsController < ApplicationController 
    before_filter :authenticate_user! 

    def create 
    @company = Company.find(params[:relationship][:followed_id]) 
    current_user.follow!(@company) 
    respond_to do |format| 
     format.html { redirect_to @company } 
     format.js {render layout: false} 
    end 
    end 

    def destroy 
    @company = Relationship.find(params[:id]).followed 
    current_user.unfollow!(@company) 
    respond_to do |format| 
     format.html { redirect_to @company } 
     format.js{render layout: false} 
    end 
    end 
end 

Если установить удаленный: ложь, форма работы, как и ожидалось, создавая и разрушая отношения, и изменения на странице перезагрузки. Когда я пытаюсь использовать AJAX, установив пульт: верно, и использовать этот код для отношений/create.js.erb и отношения/destroy.js.erb

$("#relationship").html("<%= j render('companies/unfollow') %>"); 

$("#relationship").html("<%= j render('companies/follow') %>"); 

Однако, теперь, когда я перезарядить мою страницу - я можно щелкнуть по кнопке один раз, чтобы создать/уничтожить объект отношений. Если я снова нажму, я получу 500 ошибок. Новая часть никогда не загружается.

Хотя я немного нуб, эта ошибка, кажется, указывает мне на этой линии в источнике Jquery в хромовых Дев инструментов:

xhr.send((options.hasContent && options.data) || null); 

Я использую Rails 4, Jquery-Turbolinks и Devise - если какой-либо из них будет иметь какое-либо отношение к проблеме.

Невероятно расстроенный сейчас, если кто-то может помочь в этом, будем очень признательны!

Обновление

Выход журнала ниже. Первый DELETE говорит, что он оказал мне частичное, но это не так. Второй DELETE - это то, что происходит при повторном нажатии на повторную запись во второй раз - он справедливо указывает, что связь с этим номером идентификатора больше не существует, поскольку она была удалена при первом действии.

Started DELETE "/relationships/429" for 127.0.0.1 at 2014-10-28 14:34:59 +0000 
Processing by RelationshipsController#destroy as JS 
    Parameters: {"utf8"=>"✓", "commit"=>"Unfollow", "id"=>"429"} 
    [1m[36mUser Load (1.0ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."id" = 1 ORDER BY "users"."id" ASC LIMIT 1[0m 
    [1m[35mRelationship Load (0.4ms)[0m SELECT "relationships".* FROM "relationships" WHERE "relationships"."id" = $1 LIMIT 1 [["id", 429]] 
    [1m[36mCompany Load (0.3ms)[0m [1mSELECT "companies".* FROM "companies" WHERE "companies"."id" = $1 LIMIT 1[0m [["id", 1]] 
    [1m[35mRelationship Load (0.3ms)[0m SELECT "relationships".* FROM "relationships" WHERE "relationships"."follower_id" = $1 AND "relationships"."followed_id" = 1 LIMIT 1 [["follower_id", 1]] 
    [1m[36m (0.2ms)[0m [1mBEGIN[0m 
    [1m[35mSQL (3.6ms)[0m DELETE FROM "relationships" WHERE "relationships"."id" = $1 [["id", 429]] 
    [1m[36m (0.5ms)[0m [1mCOMMIT[0m 
    Rendered companies/_follow.html.erb (2.5ms) 
    Rendered relationships/destroy.js.erb (5.3ms) 
Completed 200 OK in 19ms (Views: 7.0ms | ActiveRecord: 6.3ms) 


Started DELETE "/relationships/429" for 127.0.0.1 at 2014-10-28 14:35:04 +0000 
Processing by RelationshipsController#destroy as JS 
    Parameters: {"utf8"=>"✓", "commit"=>"Unfollow", "id"=>"429"} 
    [1m[35mUser Load (0.9ms)[0m SELECT "users".* FROM "users" WHERE "users"."id" = 1 ORDER BY "users"."id" ASC LIMIT 1 
    [1m[36mRelationship Load (0.3ms)[0m [1mSELECT "relationships".* FROM "relationships" WHERE "relationships"."id" = $1 LIMIT 1[0m [["id", 429]] 
Completed 404 Not Found in 4ms 

ActiveRecord::RecordNotFound - Couldn't find Relationship with 'id'=429: 
+1

приятно видеть вас утешать журнал для этой ошибки –

+0

я не знаю, если это он, но, похоже, у вас есть дополнительные скобки в '$ (" # relationship "). html (" <% = j (render ('companies/follow')%> ");'. Журнал консоли также будет отличным, если это не проблема. – nikkon226

+0

удален в скобках, и он все еще не работает - он застрял там, пока я много чего пытался. Обновлен с выходом журнала. – user3834416

ответ

1

У вас есть хэш от имени вашего Я БЫ.

Try изменения

<div id="#relationship"> 

в

<div id="relationship"> 
+0

как смущающе. – user3834416

0

При использовании remote: true необходимо изменить:

format.js{render layout: false} 

с

format.js 

В противном случае, вы никогда не делают relationships/create.js.erb и relationships/destroy.js.erb

Смежные вопросы