2012-04-13 4 views
9

本で推奨されているように、私はRailsの第4版で予約実用的なアジャイルウェブ開発を以下だけど、私はRailsの3.2.2ではなく3.0.5を使用しています:Railsの3.2.2実行していないRJS

~$ ruby -v 
ruby 1.9.3p125 (2012-02-16) [i686-linux] 
~$ rails -v 
Rails 3.2.2 

AJAXを含めてページを再読み込みせずにカートを再描画すると、私は立ち往生しました。

def create 
    @cart = current_cart 
    product = Product.find(params[:product_id]) 
    @line_item = @cart.add_product(product.id) 

    respond_to do |format| 
     if @line_item.save 
     format.html { redirect_to(store_url) } 
     format.js 
     format.json { render json: @line_item, status: :created, location: @line_item } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @line_item.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

そして、ここでは、(アプリ/ビュー/ line_items下)私のRJSファイルcreate.js.rjsです:

page.alert('NO PROBLEM HERE') 
page.replace_html('cart', render(@cart)) 

しかし、私がクリックしたときにここでline_items_controller.rbでアクションを作成です

<%= button_to 'Add to Cart', line_items_path(:product_id => product), :remote => true %> 

私が開発ログに次のエラーを取得:このアクションを起動するボタン

ActionView::MissingTemplate (Missing template line_items/create, application/create with {:locale=>[:en], :formats=>[:js, :html], :handlers=>[:erb, :builder, :coffee]}. Searched in: 
    * "/home/me/src_rails/depot/app/views" 
): 
    app/controllers/line_items_controller.rb:47:in `create' 

私はcreate.js.erbするcreate.js.rjsのファイル名を変更すると、問題が修正されます。

Rendered line_items/create.js.erb (0.4ms) 

を何もいなくても、警告....ビューで起こりません。 私は何が欠けていますか? file.js.erbとfile.js.rjsの違いは何ですか?

+0

hey guy!あなたのGoogleの投稿を見つけました。私は同じ状況に直面した。解決策を見つけましたか? – code4j

+0

私は問題を解決しました!私の[解決策](http://stackoverflow.com/questions/12220816/the-ajax-request-cannot-see-the-effect-without-refresh-the-browser-in-rails/12224196#12224196)を参照してください。私はこれがあなたを助けることを望む。 – code4j

答えて

18

rjsは、Rails 3.1の時点でremoved as the defaultでした。 prototype-rails gemをインストールすれば元に戻すことができますが、新しいデフォルトであるjQueryだけを使用するべきだと思います。

コードでは、rjsテンプレートが.js.erbと解釈されているため、無効なJavaScriptが生成されている可能性があります(ブラウザのJavaScriptコンソールにエラーが表示されるはずです)。変数pageを設定するために使用されるテンプレートrjsがあり、それを使ってページを操作するためのRubyコードを書くことになります。 .js.erbテンプレートでは、.html.erbのように表示されます。 <% %>タグを使用してRubyを埋め込んだ実際のJavaScriptを記述します。したがってcreate.js.erbのコードは次のようになります。

alert('NO PROBLEM HERE'); 
$('#cart').html("<%= escape_javascript(render(@cart)) %>"); 
+0

ありがとう、私は確かにjqueryに切り替えています。 –

6

rails> = 3.1の場合は、もはやjquery-rjsはありません。しかし、あなたは、ここでのCoffeeScriptを使用することができます。 line_items/create.js.coffee

alert 'NO PROBLEM HERE' 
$('#cart').html '<%= j render(@cart) %>' 

またはそのような何かを。

関連する問題