2016-11-29 8 views
1

で旅行を見つけることができませんでしたstackoverflowで解決策を検索しましたが、毎回異なる問題があるので、私は質問しました。 私のアプリケーションでは、多くの投稿を持つTravelがあります。 1人のユーザーが1回の旅行で多数の投稿を作成して多数の旅行を作成できます。 しかし、私はポストを作成しようとすると、私はこのエラーを持っている:ActiveRecordは 'id' =

ActiveRecord::RecordNotFound in PostsController#create 
Couldn't find Travel with 'id'= 

誰かが私を助けることができるので、もし私が、なぜ理解していない... ここでは私のPosts_controller.rb(アクションを作成する)でありますここで

def create 
    @travel = Travel.find(params[:id]) 
    @post = @travel.posts.new(posts_params) 
    @post.user = current_user 
    if @post.save 
     flash[:success] = "Your post is published" 
     redirect_to user_path(current_user) 
    else 
     render 'new' 
    end 
end 

私のモデルである:

class Post < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :travel 

    geocoded_by :country 
    after_validation :geocode 
end 

class Travel < ApplicationRecord 
    has_many :posts 
    belongs_to :user 
end 

マイルート:

# Travel 
    resources :travels, :shallow => true do 
     # Posts 
     resources :posts 
    end 

そしてフォームのLIGNE:

<%= form_for(@post, :html => {class: "form-horizontal", role: "form"}, :url => travel_posts_path(@travel)) do |f| %> 
     <div class="form-group"> 
      <%= f.text_field :travel_id, placeholder: @travel.id %> 
     </div> 
+0

なぜあなたは 'id'を扱えるようにしていますか?これは悪い習慣です。 – Dbz

+1

私は 'params'のデバッグを提案します。代わりに、 'params [:travel_id]'のようなことをする必要があります。しかし、私はまだユーザーが 'id'を選択することを許可しません。 – Dbz

+0

@Dbz私は旅行IDをテーブルポストのtravel_id列に追加しようとしました。フォームのフィールドはちょうど私を助けるためのものです。動作するときにその行を削除します。 –

答えて

1

params[:id]はあなたのpostidを与えるだろう、とあなたはtravelを見つけるためにそれを使用しています。これは潜在的にエラーではなく、あなたに間違った旅行を与えるかもしれませんが、それはあなたが探しているものではありません。あなたのフォームにtravel_idを指定したので、探しているものはparams[:travel_id]です。

将来コントローラの機能の上部にあるdebuggerとのparamsオブジェクトを使用して内容を確認することができます。これは、間違ったものをkeyと呼んでいて、物事が複雑になったときにどのような構造になっているかを知ることができます。

+0

大変ありがとうございました! –

関連する問題