9

私は本Pragmatic Agile Web Development With Rails 4th Editionに従っていますが、本で推奨されているように、3.0.5 ではなく Rails 3.2.2 を使用しています。

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

ページをリロードせずにカートを再描画するために AJAX を含めると、スタックしてしまいました。line_items_controller.rb の create アクションは次のとおりです。

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

そして、これが私の RJS ファイル create.js.rjs (app/views/line_items の下) です。

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

ただし、このアクションを開始するボタンをクリックすると:

<%= 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.rjs のファイル名を create.js.erb に変更すると、問題は修正されます。

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

しかし、ビューでは何も起こりません....アラートもありません。私は何が欠けていますか?file.js.erb と file.js.rjs の違いは何ですか?

4

2 に答える 2

18

Rails 3.1のデフォルトとして削除されたrjsようです。gemをインストールすることで元に戻すことができますが、新しいデフォルトである jQuery を使用する必要があると思います。prototype-rails

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

 alert('NO PROBLEM HERE');
 $('#cart').html("<%= escape_javascript(render(@cart)) %>");
于 2012-04-14T12:59:45.793 に答える
6

rails> = 3.1では、jquery-rjsはもうありません。ただし、ここではCoffeeScriptを使用できます line_items/create.js.coffee::

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

またはそのようなもの。

于 2012-04-13T20:59:46.893 に答える