2017-11-08 14 views
0

簡単なRuby on Railsアプリケーションを作成する方法を学んでいます。ユーザーがデータを入力できるフィールドを作成しています。送信(または作成)すると、このデータが保存され、ユーザーはホームページに戻ります。そこで私はモデルを作成するためにlocalhost:3000/listings/newを持っていて、次にlocalhost:3000/listing/1にアクセスして新しく作成したモデルを表示しようとしました。なぜこのようなことがあるのか​​分かりませんし、何も結果を出さずに数時間探しました。Rails Webappでレコードが見つかりませんでした。エラー

listings_controller.rb

class ListingsController < ApplicationController 

    def new 
    @listing = Listing.new #calls on new method in listing model 
    end 

    def create 
    @listing = Listing.new(listing_params) 
    @listing.save 
    redirect_to root_path 
    end 

    def show 
    @listing = Listing.find(params[:id]) 
    end 

    private 
    def listing_params 
    params.require(:listing).permit(:title, :description, :city, :state, :zipcode) 
    end 

end 

(必要な場合)new.html.erbとshow.html.erb

<div class="topbar"> 

</div> 
<div class="container"> 
    <div id="contact-area"> 

    <%= form_for @listing do |f| %> 
    <!-- taken from schema.rb --> 
    <%= f.label :title %> 
    <%= f.text_field :title %> <!-- use text field when body is just 1 line --> 

    <%= f.label :description %> 
    <%= f.text_area :description %> <!-- more for paragraphs --> 

    <%= f.label :city %> 
    <%= f.text_field :city %> 

    <%= f.label :state %> 
    <%= f.text_field :state %> 

    <%= f.label :zipcode %> 
    <%= f.text_field :zipcode, class: "zip-width", maxlength: "5" %> 

    <%= f.submit class: "create-button"%> 

    <% end %> 
    </div> 
</div> 

AND

<div class="topbar"> 
    <div class="container"> 
    <div class="vertical-center"> 
     <%= link_to 'home', root_path %> > jobs > accounting 
    </div> 
    </div> 
</div> 
<div class="container"> 
    <div> 
    <button type="button">reply</button> 
    posted <%= time_ago_in_words(@listing.created_at) %> 
    <h1 class="listing-header"><%= @listing.title %></h1> 
    <div class="box"> 
     <p>test</p> 
    </div> 
    <p><%= @listing.description%></p> 
    </div> 
    <footer> 
    <p>post id: <%= @listing.id%></p> 
    <p>posted <%= time_ago_in_words(@listing.created_at) %></p> 
    </footer> 
</div> 

routes.rbを

Rails.application.routes.draw do 
    # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html 

    #NOTE USE rake routes TO SEE ALL ROUTES 

    #Creates the CRUD actions for categories 
    resources :categories do 
    resources :subcategories #Creates CRUD actions for subcategories 
    end 

    resources :listings 

    root 'categories#index' #first page that we land on -- homepage 

    #matching paths to pages controller 
    match '/help', to: 'pages#help', via: :get 
    match '/scams', to: 'pages#scams', via: :get 
    match '/safety', to: 'pages#safety', via: :get 
    match '/terms', to: 'pages#terms', via: :get 
    match '/privacy', to: 'pages#privacy', via: :get 
    match '/about', to: 'pages#about', via: :get 
    match '/contact', to: 'pages#contact', via: :get 
end 
+0

あなたの 'root_path'は何ですか? – Gabbar

+1

レコードが 'id = 1'または' Listing.find(1) 'で存在するかどうかを確認します。 – Gabbar

+0

これに変更し、URLGenerationError - 'No route matches {:action =>" show "、:controller =>" listings "、:id => nil}、必須キーがない:[:id]。提出をクリックした後、私のIDは無名になりますか?私が追加する必要がある他のコードはありますか? –

答えて

-1

は、それはあなたがリストを作成しようとすると、あなたが検証エラーのいくつかのタイプを打つしていると作成がロールバックされていることが考えられます

def create 
    @listing = Listing.new(listing_params) 
    if @listing.save 
     flash[:notice] = "Listing created successfully." 
     redirect_to listing_path(@listing) 
    else 
     flash[:error] = @listing.errors.full_messages 
     render 'new' 
    end 
    end 

として、それを実行して、フラッシュ

0

でエラーメッセージを確認します。 、これについて有益なエラーを参照してくださいあなた置き換えることにより、アクションを作成、更新するために:

@listing.save 

@listing.save! 

で(あなたが持っているもの)前者は黙って失敗し、ちょうど無効なレコードのためにfalseを返します。後者(バグ付き)は、無効なレコードの例外で失敗します。

関連する問題