2017-04-14 13 views
0

私のアプリでは修正できないようなエラーが発生しています。私は[GET] "/ recipes/1/like"と一致するルートエラーがないままです。私が知ることができない問題は、なぜポストではなくリクエストを受け取るかということです。Rails 4の 'like'アクションのエラーと一致するルートはありません

ここは私のコードです。 経路

#recipe routes 
    resources :recipes do 
    collection do 
     get 'search' 
    end 
    member do 
     post 'like' 
     post 'review' 
    end 
    resources :reviews, except: [:show, :index] 
    end 

レシピコントローラ

def like 
    like = Like.create(like: params[:like], user: @user, recipe: @recipe) 
    if like.valid? 
     flash[:success] = "Your selection was successful" 
     redirect_to :back 
    else 
     flash[:danger] = "#{@user} " + 'you can only like/dislike once per item.' 
     redirect_to :back 
    end 
    end 

 <div class="pull-right"> 
      <%= link_to like_recipe_path(@recipe, like: true), method: :post do %> 
       <i aria-hidden="true" class="fa fa-thumbs-o-up"></i> &nbsp; 
       <%= @recipe.thumbs_up_total %> 
      <%end %> &nbsp;&nbsp;&nbsp;&nbsp; 
      <%= link_to like_recipe_path(@recipe, like: false), method: :post do %> 
       <i aria-hidden="true" class="fa fa-thumbs-o-down"></i> &nbsp; <%= @recipe.thumbs_down_total %> 
      <%end %> 
     </div> 

すくい経路

like_workout_path POST /workouts/:id/like(.:format) workouts#like 
like_recipe_path POST /recipes/:id/like(.:format) recipes#like 

iはボタン

0123を検査
<a rel="nofollow" data-method="post" href="/recipes/1/like?like=true"> 
         <i aria-hidden="true" class="fa fa-thumbs-o-up"></i> &nbsp; 
         0 
        </a> 

私はリンクを検査しましたが、レンダリング時に投稿の動作がありますが、クリックするとこのルーティングエラーページが表示されます。誰かが私が間違って行ったことを説明してもらえますか?

+0

[APIドキュメント](http://api.rubyonrails.org/v4.2/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to): "サポートされている動詞は:post、:delete、 :patch、and:put。ユーザがJavaScriptを無効にしている場合、リクエストはGET._ "を使用することに戻ります。あなたのコードは大丈夫ですか?ブラウザの設定を確認する必要がありますか? – hoangdd

+0

ブラウザのコンソールでリンクを調べましたか?それは 'data-method =" post "'を持っていますか? – Pavan

+0

コントローラーyrの '好き 'メソッドですか? – 7urkm3n

答えて

0

POSTを使用して投稿するlink_to 投稿リクエストをリンク経由で送信することは、htmlの<a href>では実行できないものです。これを使用してGETリクエストを作成することができます(POSTではなく)。つまり、Railsにはいくつかの魔法があります。

:method => :postオプションを提供することにより、Railsはフォームを作成し、javascriptの経由にそれを提出します。これが機能するにはjquery-rails gemが必要であることに注意してください。もしあなたがそれを持っていなければ、魔法は起こらず、あなたのリンクはGET要求にデフォルト設定されます。

<%= link_to "Post", root_path, :method => :post %> 
# => <a rel="nofollow" data-method="post" href="/">Post</a> 


#Adding more params to the POST request 
<%= link_to "Create User", users_path(:email => "[email protected]", :password => "secret"), :method => :post %> 
# => <a rel="nofollow" data-method="post" href="/users?email=jdoe%40email.com&amp;password=secret">Create User</a> 

それともform_tag

# not tested, maybe will have syntax issue 
<%= form_tag(like_recipe_path, {:method => :post}) do %> 
    <%= contant_tag(:i, nil, class: "fa fa-thumbs-o-up", "aria-hidden": true, :onclick => "this.form.submit();") %> 
    <%= @recipe.thumbs_up_total %> 
<% end %> 
+0

私は下のコードを試しましたが、それは私のためにクリック可能なものを作成していないようです。それは私に親指を与えるが、他には何も与えない。奇妙なことは私のコードが動作するために使用されますが、私のgithubリポジトリからクローンを作成する必要があるので、物事はランダムに壊れています。 –

+0

@ J.Schimdt私はあなたのレポがgemfileのための別の設定を持っているか、おそらくgithubのための.ignoreファイルがブロックされていると推測します...あなたのローカルバージョンが動作しているなら、すべてのマシンに伝播します。ときどき 'bundle update'コマンドを実行してから、変更をpushして' bundle install'を実行します。 – Mirv

0

を使用することができます私はあなたがjqueryのが有効になっているあなたのgithubの&を確認 - 私のブラウザはJavaScriptが有効になっている...私は最初は同じエラーを取得する - 私が得ましたただconfig/routes.rbプロジェクトへのルートを「取得」追加することにより、作業の最初のエラーが...

... 
     #recipe routes 
     resources :recipes do 
     collection do 
      get 'search' 
     end 
     member do 
      match 'recipes/:id' => 'recipes#like', via: [:get, :post] 
      match 'review/:id' => 'recipes#review', via: [:get, :post] 
     end 
     resources :reviews, except: [:show, :index] 
     end 
... 

これは、より多くのエラーとQUEへの扉を開きますこのようschema.rbのためのあなたのテーブルの上などのコースのstions ... ...

... 
    create_table "likes", force: :cascade do |t| 
     t.boolean "like" 
     t.integer "chef_id" 
     t.integer "recipe_id" 
     t.datetime "created_at" 
     t.datetime "updated_at" 
     t.integer "workout_id" 
     end 
... 

...もちろん、それはまだあなたが使用している likeアクションのためのあなたのレシピコントローラにプログラミングスタイルに穴を残し...あなたのコードは、おそらくなければならないことを意味し

like = Like.create(like: params[:like], user: @user, recipe: @recipe)

あなたの代わりにuser_idchef_idを持っています... ...

like = Like.create(like: params[:like], chef_id: @user, recipe: @recipe) はもちろん、それはあなたのコントローラとスキーマが後に調整する必要がある場合には、利用者のIDだレシピを気に入っていない限り

(もちろんこれは、データベース・スキーマなどを調整しなければならないことを意味します)ルーティングの問題が解決されます。

+0

Thanks @Mirv、routes.rbのように 'get'を追加しました。それはそれを修正したようです:) –

+0

@ J.Schimdtあなたはそれがフィックスであったと感じた場合、またはそれが助けてもそれをアップアップしたが、それを修正しなかった場合、これを答えたものとしてマークすることができます:) – Mirv

関連する問題