Ajax и voice_fu | отсутствует до заявления - PullRequest
1 голос
/ 05 марта 2010

соответствующий вопрос: Vote_fu и запросы Ajax

Кажется, что-то не так с моим запросом Ajax.То, что я пытаюсь сделать, это по событию щелкнуть голосование, отправить голосование, а затем обновить страницу без обновления страницы.

voice_controller.rb:

def create
    @album = Album.find(params[:album_id])

    respond_to do |format|
      if current_user.vote(@album, params[:vote])
        format.js  { render :action => "create", :vote => @vote }
        format.html { redirect_to([@album.user, @album]) }
        #format.xml  { render :xml => @album, :status => :created, :location => @album }
      else
        format.js  { render :action => "error" }
        format.html { render :action => "new" }
        format.xml  { render :xml => @vote.errors, :status => :unprocessable_entity }
      end
    end
  end

ссылка |для просмотра альбома:

<%= link_to_remote "Vote Up",
:url => user_album_votes_path(album.user, album, 
:vote => :true, :format => :js),
:method => :post %>

application.js

jQuery.ajaxSetup({
    'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript")}
})

jQuery(document).ready(function() {
  $("#votes_.album").bind('click');
})

create.js

page.replace_html "#votes_{@album.id}", 
:partial => "album_vote", 
:locals => {:album => @album}

Это следующее сообщение об ошибке, которое я получаю:

missing ; before statement
[Break on this error] page.replace_html "#votes_#{@album.id}", ...bum_vote", :locals => {:album => @album}

Я не уверен, что здесь происходит не так. Я следовал многим примерам из документа voice_fu, у которого все еще есть проблемы.

http://github.com/peteonrails/vote_fu/tree#readme

одна поправкасделано на create.js

теперь есть еще одна ошибка:

Нет, ошибка перенесена на voice_controller

NoMethodError (You have a nil object when you didn't expect it!
<br />
The error occurred while evaluating nil.vote):
  app/controllers/votes_controller.rb:53:in `create'
  app/controllers/votes_controller.rb:52:in `create'
<br />
Rendered rescues/_trace (128.4ms)
Rendered rescues/_request_and_response (0.4ms)
Rendering rescues/layout (internal_server_error)

Эти строки находятся в действии создания, котороевыглядит отлично!?

Как мне заставить это работать?

С уважением

Дан

Ответы [ 3 ]

1 голос
/ 08 марта 2010

Решено!

Проблема заключалась в том, что я не добавил оператор before для обновления подсчета голосов!так я сделал, и это сработало так же, как и я, я изменил create.js на create.sj.erb, а также внес небольшие изменения в мой файл application.js.После всего этого я затем добавил flash[:note] = you have voted!, затем добавил функцию для удаления уведомления о вспышке через секунду и fadeOut!

Для всех, кому интересно, вот код:

Application.js

jQuery(document).ready(function() {
  $("#vote").bind('click', function(e) {
    if (e.target.tagName == "DIV") {
        $(this).find(".album_extened").toggle('blind');
    }
 })

})

create.js.erb

$("#vote").before('<div id="notice"><%= escape_javascript(flash.delete(:notice)) %></div>');
$("#vote_count").html("<%= @album.votes_for - @album.votes_against %>");

$(document).ready(function() {
  setTimeout(hideFlashMessages, 1000);
});

function hideFlashMessages() {
$("#vote, #notice").append('').fadeOut(1000);
}

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

Хороший просмотр [http://railscasts.com/episodes/136-jquery][1]

Чтение [текст ссылки] [2]

Скоро исправим вещи Спасибо Джонатан текст ссылки

[1]: http://railscasts.com/episodes/136-jquery/"Rails В ролях: 136 "[2]: http://www.notgeeklycorrect.com/english/2009/05/18/beginners-guide-to-jquery-ruby-on-rails/"Beginners Guild to jQuery and Rails" и спасибо Сэму за помощь !!

1 голос
/ 05 марта 2010

Попробуйте изменить файл create.js на

page.replace_html "#votes_#{@album.id}", :partial => "album_vote", :locals => {:album => @album}

Возможно, вы пропустили # для интерполяции строки переменной.

0 голосов
/ 06 марта 2010

Мне кажется, что current_user в методе create не получил своего значения.

Как установить значение current_user? В других плагинах они обычно определяют это как Метод экземпляра или переменная экземпляра с аксессором.

Так что, возможно, может помочь изменение метода создания на следующее:

def create
    @album = Album.find(params[:album_id])

    respond_to do |format|
      if @current_user.vote(@album, params[:vote])
        format.js  { render :action => "create", :vote => @vote }
        format.html { redirect_to([@album.user, @album]) }
        #format.xml  { render :xml => @album, :status => :created, :location => @album }
      else
        format.js  { render :action => "error" }
        format.html { render :action => "new" }
        format.xml  { render :xml => @vote.errors, :status => :unprocessable_entity }
      end
    end
  end

Возможно, вы пропустили @ перед current_user.vote

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...