0

投稿の編集に問題があります。私が編集をクリックすると、編集するページに私をリダイレクトすると思われるときにエラーが発生します。私は2つのテーブルを持っているpostsもう1つはplacesです。 placesテーブルにpost_idという外部キーがあります。すべての投稿has_oneの場所。 PostControllerの「場所」を含む「編集」は、おそらく参照される必要があるため、正しく呼び出されないことを理解しています。コードを動作させるにはどうすればいいですか?PostsControllerのActiveRecord :: RecordNotFound#edit "'id' = 17の場所を見つけることができませんでした。

PostsControllerの:

class PostsController < ApplicationController 

before_action :authenticate_user!, :except => [:show, :index, :new] 

before_action :set_post, only: [:show, :edit, :update, :destroy] 

before_action :owned_post, only: [:edit, :update, :destroy] 

    def index 
    @post = Post.new 
    @posts = Post.all 
    end 

    def show 

    @post = Post.find(params[:id]) 
    end 

    def new 

    @post = current_user.posts.build 

    @posts = Post.all 


    end 

    def create 
    @post = current_user.posts.build(post_params) 


    if @post.save 
     flash[:success] = "Your post has been created!" 
     redirect_to root_path 
    else 
     flash[:alert] = "Your new post couldn't be created! Please check the form." 
     render :new 
    end 
    end 

    def find 
    @place = Place.new 
    end 

    def edit 
    @post = Post.find(params[:id]) 
    @place = Place.find(params[:id]) 
    end 

    def update 
    if @post.update(post_params) 
     flash[:success] = "Post updated." 
     redirect_to root_path 
    else 
     flash.now[:alert] = "Update failed. Please check the form." 
     render :edit 
    end 
    end 

    def destroy 
    @post.destroy 

    flash[:success] = "Your Post has been removed." 
    redirect_to root_path 
    end 

    private 



    def post_params 
    params.require(:post).permit(:image, :caption, :latitude, :longitude) 
    end 

    def set_post 
    @post = Post.find(params[:id]) 
    end 

    def owned_post 
    unless current_user == @post.user 
    flash[:alert] = "That post doesn't belong to you!" 
    redirect_to root_path 
    end 
end 

end 

また、私は新しいポストを作成するときに両方の場所とポストテーブルがお互いに関連して、正しいフィールドを取り込むように、このフォームに場所を追加したいと思います。ポストを作成

フォーム:

<%= form_image_select(@post) %> 
     <%= simple_form_for @post, html: { multipart: true } do |f| %> 
      <div class="row"> 

      <div class="col-md-12 text-center"> 
       <%= f.error_notification %> 
      </div> 
      </div> 
      <div class="container-fluid"> 
      <div class="form-group text-center"> 
       <h4>Upload an image (this is required):</h4> 
       <%= f.input :image, label: false, input_html: { onChange: 'loadFile(event)' } %> 
      </div> 
      <%= simple_fields_for place.new do |o| %> 
      <div class="form-group text-center"> 
      <%= o.input :address, label: false, placeholder: "search", class: 'controls', id: "pac-input" %> 
      <input id="pac-input" class="controls" type="text" placeholder="Search Box"> 

      </div> 


      <% end %> 

      <div class="form-group text-center"> 
       <%= f.input :caption, label: false, placeholder: 'Add your caption' %> 
      </div> 
      <div class="form-group text-center"> 
       <%= f.button :submit, class: 'btn-success btn-block' %> 
      </div> 
      </div> 
     <% end %> 

新しいエラーログ:

は、2016年5月8日午前5時59分33秒で:: 1のためにGET "/ポスト/ 17 /編集" を開始+0900 PostsControllerによる処理#HTMLとして編集 パラメータ:{"id" => "17"} ユーザ負荷(0.1ms)SELECT "users"。* FROM "users" WHERE "users"。 "id" =? "ID" ASC LIMIT 1 [["id"、16]] ポストロード(0.1ms)SELECT "posts"。* FROM "posts" WHERE "posts"、 "id" =? LIMIT 1 [["id"、17]] ユーザ負荷(0.1ms)SELECT "users"。* FROM "users" WHERE "users"。 "id" =? LIMIT 1 [["id"、16]] Place Load(0.1ms)SELECT "places"。* FROM "places" where "places"。 "post_id" =? LIMIT 1 [["post_id"、17]] レンダリングされた投稿/ _form.html.erb(14.0ms) レイアウト/アプリケーション(14.9ms)内の投稿/ edit.html.erbレンダリング 完了済み500内部サーバエラー(21ms ActiveRecordの:0.3ms)_app_views_posts__form_html_erb__1067044067393355525_70134077243420' で

ActionView ::テンプレート::エラー(未定義のローカル変数やメソッドplace' for #<#<Class:0x007f92b27c7738>:0x007f92bb24b288>): 17: <h4>Upload an image (this is required):</h4> 18: <%= f.input :image, label: false, input_html: { onChange: 'loadFile(event)' } %> 19: </div> 20: <%= simple_fields_for place.new do |o| %> 21: <div class="form-group text-center"> 22: <%= o.input :address, label: false, placeholder: "search", class: 'controls', id: "pac-input" %> 23: <input id="pac-input" class="controls" type="text" placeholder="Search Box"> app/views/posts/_form.html.erb:20:inブロック アプリ/ビュー/記事/ _form.html.erb:8:_app_views_posts__form_html_erb__1067044067393355525_70134077243420' app/views/posts/edit.html.erb:2:in _app_views_posts_edit_html_erb__4372466127864082923_70134042275460' の

+0

あなたは両方のポストを見つけています同じidで配置してください。必ずしも同じIDを持つとは限りません。また、あなたの説明によると、あなたはポストの中にplace_idを入れておかなければなりません。投稿には1つの場所がありますが、1つの場所には多くの投稿があることができます – Meer

答えて

1

編集アクションでは、投稿のIDである:idであなたのプレイスを検索しようとしています。 OUあなたが行うことができますあなたのPostモデルでhas_one:place関係を持っている:あなたはset_postでそれを行うため、あなたの編集アクションになることができるように@postの設定

def edit 
    @post = Post.find(params[:id]) 
    @place = @post.place; 
end 

は、冗長である:

def edit 
    @place = @post.place; 
end 
+0

aww私は見る!はい、それは最初のエラーを取り除きました:PostEs内のNameErrorは "未定義のローカル変数またはメソッド' place 'を編集します。 –

+0

ポストとプレースモデルの間に関連性/関係がないためです。これを** post.rb **に追加してください。 'has_one:place'と** place.rb **を追加してください' belongs_to:post' – Meer

+0

ちょっとしたこと! Ivには既にhas_one:placeとbelongs_to:postの両方がモデルに含まれていました!これ以外に何が起こったのでしょうか?可能であれば –

関連する問題