私は、ユーザーが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_filter
javascriptを妨げていますか?どうすればこれを修正できますか?ご意見ありがとうございます!
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 %>;