у меня не работает обратный вызов в контроллере - PullRequest
0 голосов
/ 06 марта 2012

У меня есть этот код в моем контроллере:

class InvitationsController < ApplicationController

before_filter :invitations_sent!

def new
 #code here
end

def create
 #code here
end

  private
   def invitations_sent!
    if current_user.invitations.size > 1
      return false
      format.js { render :text => "you can not send more invitations" }
    else
    return true
    end         
   end
end

Я вызываю метод new с:

<%=link_to "Invite Friends", new_invitations_path, :remote =>true, :id => "invite_to_friends" %>

Почему я могу получить доступ к методам new и создать, если я отправил 3 приглашения?

Ответы [ 3 ]

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

Я никогда раньше не использовал удаленные ссылки, поэтому я не уверен насчет этой части, но вам определенно нужно, чтобы return false шел после format.js { }, если вы хотите, чтобы format.js { } действительно работал.Как только рубин попадет в оператор возврата, выполнение метода прекращается.

ОБНОВЛЕНИЕ: Из вашего комментария не совсем понятно, что вы изменили.Но если вы хотите, чтобы рендеринг происходил вообще, этот метод должен выглядеть следующим образом:

def invitations_sent!
  if current_user.invitations.size > 1
    respond_to do |format|
      format.js { render :text => "you can not send more invitations" }
    end
    return false
  else
    return true
  end         
 end

Вне зависимости, блок рендеринга не был в порядке.Он должен быть заключен в блок respond_to, как указано выше.

0 голосов
/ 03 февраля 2013

Это еще один способ вернуть true / false.

respond_to do |format|
    format.js { render :nothing => true, :status => 200, :content_type => 'text/json' }
end
0 голосов
/ 06 марта 2012

Я не знаю ответа, но мой первый шаг в выяснении его заключается в том, чтобы ответить на следующие вопросы:

1) Действительно ли вызывается ваш фильтр до?

2)Правильно ли значение current_user в фильтре?

3) Являются ли приглашения current_user правильными?

4) Действительно ли выполняется return false?

Вы можете посмотреть, что происходит вВаш фильтр, добавив raise операторов или звонков на puts.

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