rails 4学「railsを応用してweb敏捷開発第4版」で出会う問題

4326 ワード

前言
Railsは2013年6月末にRails 4を発表した.しかし、市販されている最高のrails教材「railsを応用してweb敏捷開発を行う」はrails 3を対象としている.チュートリアルに従って構成すると、システムのデフォルトインストールrailsはrails 4に直接変わります.0になりました.もちろんrvmでもrails 3を簡単に作ることができます.0の環境.でもrails 4が出てきた以上、なぜ体験しないのか・・・
ここでRails 4を用いて本の前のステップに従ってアプリケーションを作成する場合に発生する可能性のあるいくつかの問題と解決方法を共有します.
レイアウトはすべて本の章数に基づいて記述されている.
 
第二章
2.1アプリケーションの新規作成
Page11
もとの命令
 
rails new demo

問題があるかもしれません:GFW内で生活しているので、科学的なインターネットの手段がなければ、あるいはネットがよくなければ、この一歩は遅くなります.ここではbundleのステップをスキップすることをお勧めします.
 
 
rails new demo --skip-bundle

 
Page12
サーバの起動
 
rails server

rails 3は最初から多くのキーワードを簡略化しているようですが、よく使われる略語をいくつか挙げてみましょう.
 
 
 
rails s  # start server
rails g #   rails generate   
rails d #  rails destory    

 
 
第十一章Ajax初体験
P103
質問:create.js.rjs
rails 4はrjsを完全に捨てたので、本に従って以下のコードを使うのは、少しも役に立たない.
 
page.replace_html('cart',render(@cart))

解決策は2つあり,1つはcoffee script,1つはjqueryを用いてdomの操作を行う.
 
ここではjqueryを用いてこの問題を解決する方法を紹介します.
1.jqueryのインストール
 
rails g jquery:install --ui --force

 2.new file- create.js.erb
 
 
$('#cart').html(" <%= escape_javascript(render(@cart))%> ");

htmlメソッドの後の引用符は二重引用符でなければなりません.そうしないと、後期にテスト例が失敗します.
 
 
P 105ハイライト変化
ここでハイライトanimateを使用するため、追加のjquery-pluginサポートが必要です.
1.まずダウンロード Jquery-colorに行き、jquery-color.jsファイルは/app/assets/javascriptsディレクトリの下に配置されます
2.修正前のcreate.js.Erbファイル、highlight変化部分をサポートするコードを追加します.ここで例をあげます.
 
if($('#cart tr').length==1){$('#cart').show("slow");}
$('#current_item').css({'color':'red'}).animate({'color': "white"});//      

 
 
 
P 108空きカートを隠す
P 108のhelperメソッドが完了するとjsが失効する場合に遭遇しました.私自身の解決策は、余計なコードを取り除くことです.ローカル最終クラスの削除を推奨cartのunlessコード.
 
P 111試験Ajax変更
rjsではなくjqueryを使用するため、この部分のテストコードも調整する必要があります.
 
  test "should create line_item via ajax" do
    assert_difference('LineItem.count') do
      xhr:post,:create,:product_id=>products(:one).id
    end
    
    assert_response :success
    assert_select_jquery :html ,"#cart" do
      assert_select 'tr#current_item td',/Programming Ruby 1.9/
    end
    
  end

 
 
第12章支払
P120
orders_controllers.rb中原書コードは以下の通りである
 
def create
  @order =Order.new(params[:order])
   ###etc###
end

rails 4では、書き方を変えるべきで、注意深い学生は足場が生成したcontrollerの中に2つのコードがあることを発見することができます
before_action :set_order, only: [:show, :edit, :update, :destroy]

    def order_params
      params.require(:order).permit(:name, :address, :email, :pay_type)
    end

少しspring MVCの=の中のpreloadの方法.order_が見えますpararmsメソッドは、requestのOrderを返すことと、元のparams[:order]を返すことに違いはありません.だからこの部分は今変更すればいいです.
  # POST /orders
  # POST /orders.json
  def create
    @order = Order.new(order_params)
    @order.add_line_items_from_cart(current_cart)
    
    
    respond_to do |format|
      if @order.save
        Cart.destroy(session[:cart_id])
        session[:cart_id]=nil
        
        format.html { redirect_to store_url, notice: 'Thanks for your order' }
        format.json { render action: 'show', status: :created, location: @order }
      else
        format.html { render action: 'new' }
        format.json { render json: @order.errors, status: :unprocessable_entity }
      end
    end
  end

 
まとめ
他の問題はすべて問題ではないはずで、基本的に第4版の本を持ってrails 4で入門する問題も大きくありません.何か妖しい問題があったら幻の伝言で討論します.