2

ボタンを押したときにパーシャルを更新するのに苦労しています。ページ全体ではなく、単にdivを更新したい。これが私が見ているものです:

<div id="ajax">
  <%= render 'layouts/confessions' %>
</div>

次に、私の部分_confessions.html.erbには、いくつかの基本的なhtmlとこれに似た2つのボタンがあります。

<%= form_tag( { :controller => :confessions, :action => :upvote, :id => conf.id }, { :method => :put } ) do %>
    <%= submit_tag 'Like' %>
<% end %>

私のconfessions_controller.rb:

def upvote
  @confession = Confession.find(params[:id])    
  Confession.increment_counter :upvotes, @confession
  respond_to do |format|
    format.js
  end
end

そして最後にupvote.js.erb

$('#ajax').html("<%= escape_javascript(render(:partial => 'confessions')).html_safe %>");

データベースに送信するアクションは機能していますが、ページは /upvote?id=9divを更新するだけでなく、リダイレクトされています(idは異なる場合があります)。私は何が間違っているのですか?私はRailsを初めて使用するので、完全に明白な何かを見逃している可能性があります...

編集:これが私のフォルダ構造です:

私の見解:views/pages/home.html.erb

私の部分:views/layouts/_confessions.html.erb

私のコントローラー:controllers/confessions_controller.rb

私のjs.erbファイル:views/confessions/upvote.js.erb

rake routes

    confessions GET    /confessions(.:format)            confessions#index
                POST   /confessions(.:format)            confessions#create
new_confession  GET    /confessions/new(.:format)        confessions#new
edit_confession GET    /confessions/:id/edit(.:format)   confessions#edit
 confession     GET    /confessions/:id(.:format)        confessions#show
                PUT    /confessions/:id(.:format)        confessions#update
                DELETE /confessions/:id(.:format)        confessions#destroy
     upvote            /upvote(.:format)                 confessions#upvote
   downvote            /downvote(.:format)               confessions#downvote
       root            /                                 pages#home
4

2 に答える 2

4

application.jsにこれがあることを確認してください

//= require jquery
//= require jquery_ujs

参考:Rails form_for:remote=>trueはjsメソッドを呼び出していません

次に、これを変更します。

$('#ajax').html("<%= escape_javascript(render(:partial => 'confessions')).html_safe %>");

に:

$('#ajax').html("<%= escape_javascript(render(:partial => 'layouts/confessions')).html_safe %>");
于 2013-02-23T11:46:51.457 に答える
1

:remote=>trueを追加します

<%= form_tag( { :controller => :confessions, :action => :upvote, :id => conf.id }, { :method => :put, :remote=>true } ) do %>

また、Railsルートを読んで、PUTの告白/賛成のルートを設定する方法を確認してください。

http://guides.rubyonrails.org/routing.html#adding-more-restful-actions

于 2013-02-23T02:10:49.003 に答える