2

私は、ユーザーがActiverecordReputationSystemのgemとのリンクに投票できるredditのようなアプリを持っています。

Railscast#199に基づいmobile.erbて、モバイルデバイスを介してサイトにアクセスする場合にフォーマットが使用されるモバイルバージョンを作成しようとしています。

投票方法は、モバイル以外の形式(デフォルトはjavascriptですが、htmlでも機能します)では正常に機能しますが、モバイルでは次のようにエラーを返します。Getの代わりにしようとしていることに注意してくださいPost

Started GET "/links/98/vote?type=like" for 127.0.0.1 at 2012-12-25 19:16:45 -0500
ActionController::RoutingError (No route matches [GET] "/links/98/vote"):

これを引き起こしているのは何ですか?before_filterjavascriptを妨げていますか?どうすればこれを修正できますか?ご意見ありがとうございます!

application_controller.rb

before_filter :prepare_for_mobile

def prepare_for_mobile
  session[:mobile_param] = params[:mobile] if params[:mobile]
  request.format = :mobile if mobile_device?
end

def mobile_device?
  if session[:mobile_param]
    session[:mobile_param] == "1"
  else
    request.user_agent =~ /Mobile/
  end
end
helper_method :mobile_device?

ルート.rb

resources :links do
  member { post :vote }
end

links_controller.rb

def vote
  value = params[:type] == "like" ? 1 : 0
  @link = Link.find(params[:id])
  @link.add_or_update_evaluation(:link_votes, value, current_user)
  respond_to do |format|
    format.html { redirect_to :back }
    format.mobile { redirect_to :back }
    format.js
  end
end

_link.mobile.erb

<div id="link_<%= @link.id %>">
  <%= link_to "like", vote_link_path(@link, type: "like"), method: "post", remote: true %>
</div>

<div id="link_points_<%= @link.id %>">
  <%= @link.reputation_for(:link_votes).to_i %>
</div>

投票.js.erb

$('#link_<%= @link.id %>').html("<%= j link_to "up", vote_link_path(@link, type: "like"), method: "post", remote: true %>");


$('#link_points_<%= @link.id %>').html("<%= @link.reputation_for(:link_votes).to_i %>;
4

1 に答える 1

0

これが私がしたことです:

config / initializers / mime_types.rb

Mime::Type.register_alias "text/html", :mobile
Mime::Type.register_alias "text/javascript", :mobilejs /* newly added mobilejs */

application_controller.rb

before_filter :prepare_for_mobile

def prepare_for_mobile
  session[:mobile_param] = params[:mobile] if params[:mobile]
  if mobile_device?
    if request.format == :js
      request.format = :mobilejs /* newly added mobilejs format */
    else
      request.format = :mobile
    end
  end
end
于 2012-12-27T14:25:59.430 に答える