before_filter не перенаправляется при использовании devise и jquerymobile

При использовании формата/MIME-типа, называемого format.mobile, и я хочу выполнить действие, которое требует, чтобы пользователь сначала использовал вход в систему, используя before_filter :authenticate_user, он не перенаправляет меня на страницу входа в систему, которую предполагается выполнить, вместо того, чтобы возвращать сообщение в моем журнале сервера написано Completed 401 Unauthorized in 336ms и не перенаправляет меня на страницу входа. Я использую jquerymobile для своей мобильной поддержки, как сделать перенаправление вызова.

шаблон шоу песен

<% reply = @song.replies.first(:select => 'id, yes', :conditions => ['user_id = ?', current_user]) %>

<div class="ui-body ui-body-a double-margin-top">
  <p class="small-fonts">
    Show your love or hate for this song.
  </p>
<fieldset class="ui-grid-a">
                    <%= form_for(:reply, :remote => true, :url => song_replies_path(song)) do |f| %>
                        <%= f.hidden_field :yes, :value => Reply::Response::No %>
                        <div class="ui-block-a">
                          <%= submit_tag "Hate", "data-role"=>"button", "data-icon"=>"trash", "data-theme"=>"b" %>
                        </div>
                    <% end %>
                    <%= form_for(:reply, :remote => true, :url => song_replies_path(song)) do |f| %>
                        <%= f.hidden_field :yes, :value => Reply::Response::Yes %>
                        <div class="ui-block-b">
                          <%= submit_tag "Love", "data-role"=>"button", "data-icon"=>"love", "data-theme"=>"b" %>
                        </div>
                    <% end %>
</fieldset>
</div>


class RepliesController < ApplicationController

  before_filter :authenticate_user!
  def create
    @reply = Reply.new(params[:reply])
    @reply.song_id = params[:song_id]
    @reply.user = current_user

    respond_to do |format|
      if @reply.save
        @song = Song.find(params[:song_id])
        format.html { redirect_to @song }
        format.js
        format.mobile {redirect_to @song}
      else
        format.html { redirect_to home_path }
      end
    end
  end

  # PUT /questions/replies/1
  def update
    @reply = Reply.find(params[:id], :include => :song)
    @song = @reply.song

    was_yes = @reply.yes?
    now_yes = params[:reply][:yes].to_i == Reply::Response::Yes

    respond_to do |format|
      if @reply.update_attributes(params[:reply])
        # Make sure we keep the question's response cache updated
        if was_yes and not now_yes
          @song.increment(:no_count)
          @song.decrement(:yes_count)
          @song.save
        elsif not was_yes and now_yes
          @song.increment(:yes_count)
          @song.decrement(:no_count)
          @song.save
        end

        format.html { redirect_to @song }
        format.js
        format.mobile { redirect_to @song }
      else
        format.html { redirect_to @song }
      end
    end
  end

end

журнал сервера

Started POST "/songs/12/replies" for 127.0.0.1 at 2012-01-21 21:00:56 +0100
  Processing by RepliesController#create as HTML
  Parameters: {"utf8"=>"✓", "authenticity_token"=>"xT1pLXOCmqAf8wuflvesgeUeXuBBpNsfCXf+JMD64rM=", "reply"=>{"yes"=>"1"}, "commit"=>"Love", "song_id"=>"12"}
Completed 401 Unauthorized in 336ms

person Uchenna    schedule 21.01.2012    source источник
comment
Без публикации примера кода, ссылки на ваш проект или jsfiddle.net трудно увидеть всю проблему.   -  person Phill Pafford    schedule 22.01.2012
comment
только что обновил пример кода, но проблема в том, что перед фильтром он не перенаправляет меня на страницу входа. что он должен делать обычно   -  person Uchenna    schedule 22.01.2012
comment
Я думаю, что разработка не выполняет автоматическую переадресацию с мобильным форматом.   -  person Uchenna    schedule 22.01.2012
comment
У меня такая же проблема. Я работаю над этим. Где вы можете это решить?   -  person Yohann T.    schedule 11.06.2012


Ответы (1)


У меня была такая же проблема из-за того, что я использовал jquery mobile, который использует вызовы AJAX для методов link_to. В моем случае я сделал это обычным link_to (не на основе AJAX), добавив к своей ссылке следующее:

data-ajax="false"

в параметрах link_to, т.е.:

link_to 'Model', {:controller => "models", :action => "any_action"}, "data-ajax" => "false"

Я надеюсь, что это поможет кому-то когда-нибудь. Ваше здоровье! Йоханн.

person Yohann T.    schedule 12.06.2012