2013-09-27 4 views
0

Я пытаюсь научиться Rails, и я сделать мое первое приложение, и я бегу в эту ошибку:Rails 4.0 ActiveRecord :: RecordNotFound

ActiveRecord::RecordNotFound in PartsController#show 
Couldn't find Part with id=new_ic 

с выделенным источником:

def set_part 
@part = Part.find(params[:id]) 
end 

Я являюсь бренд новый для рельсов, и я не могу понять, что не так, и я не могу найти никакой помощи в Интернете. Приложение является частью системы управления электронными компонентами. Форма заполняется и данные сохраняются в базе данных для дальнейшего использования/обновления. Может ли кто-нибудь помочь?

Источника временного кода:

части/_ic_form.html.erb

<h1>Add An IC</h1> 

<%= simple_form_for @parts do |f| %> 


    <%= f.input :component_type, :as => :hidden, :input_html => { :value => "IC"} %> 
    <%= f.input :ic_model, label: 'IC Model' %> 
    <%= f.input :ic_manufacturer, label: 'IC Manufacturer' %> 
    <%= f.input :ic_pinCount, label: 'IC Pin-Count' %> 
    <%= f.input :ic_mountType, collection: ["Through Hole", "Surface Mount"], label: 'IC Mount Type' %> 
    <%= f.input :ic_package, label: 'IC Package' %> 
    <%= f.input :ic_quantityOnHand, label: 'Quantity On Hand' %> 
    <%= f.input :ic_quantityOnOrder, label: 'Quantity On Order' %> 





    <%= f.button :submit %> 
<% end %> 

части/new_ic.html.erb

<%= render 'ic_form' %> 

части/new.html .erb

<h1>New part</h1> 

<%= link_to 'IC', 'new_ic' %> 

<%= link_to 'Back', parts_path %> 

parts_controller.rb

class PartsController < ApplicationController 
    before_action :set_part, only: [:show, :edit, :update, :destroy] 


    before_filter :initialize_parts 

    def initialize_parts 
    @parts = Part.new 
    end 


    # GET /parts 
    # GET /parts.json 
    def index 
    @parts = Part.all 
    end 

    # GET /parts/1 
    # GET /parts/1.json 
    def show 
    end 

    # GET /parts/new 
    def new 
    @part = Part.new 
    end 

    # GET /parts/1/edit 
    def edit 
    end 

    # POST /parts 
    # POST /parts.json 
    def create 
    @part = Part.new(part_params) 

    respond_to do |format| 
     if @part.save 
     format.html { redirect_to @part, notice: 'Part was successfully created.' } 
     format.json { render action: 'show', status: :created, location: @part } 
     else 
     format.html { render action: 'new' } 
     format.json { render json: @part.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # PATCH/PUT /parts/1 
    # PATCH/PUT /parts/1.json 
    def update 
    respond_to do |format| 
     if @part.update(part_params) 
     format.html { redirect_to @part, notice: 'Part was successfully updated.' } 
     format.json { head :no_content } 
     else 
     format.html { render action: 'edit' } 
     format.json { render json: @part.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /parts/1 
    # DELETE /parts/1.json 
    def destroy 
    @part.destroy 
    respond_to do |format| 
     format.html { redirect_to parts_url } 
     format.json { head :no_content } 
    end 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_part 
     @part = Part.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def part_params 
     params[:part] 
    end 
end 

routes.rb Довольно уверен, что я ввинчивается этот слишком

Pms::Application.routes.draw do 
    resources :parts 

    resources :parts 
    root to: "parts#new_ic" 

end 

рейк маршруты Выход:

Prefix Verb URI Pattern    Controller#Action 
    parts GET /parts(.:format)   parts#index 
      POST /parts(.:format)   parts#create 
new_part GET /parts/new(.:format)  parts#new 
edit_part GET /parts/:id/edit(.:format) parts#edit 
    part GET /parts/:id(.:format)  parts#show 
      PATCH /parts/:id(.:format)  parts#update 
      PUT /parts/:id(.:format)  parts#update 
      DELETE /parts/:id(.:format)  parts#destroy 
      GET /parts(.:format)   parts#index 
      POST /parts(.:format)   parts#create 
      GET /parts/new(.:format)  parts#new 
      GET /parts/:id/edit(.:format) parts#edit 
      GET /parts/:id(.:format)  parts#show 
      PATCH /parts/:id(.:format)  parts#update 
      PUT /parts/:id(.:format)  parts#update 
      DELETE /parts/:id(.:format)  parts#destroy 
    root GET /      parts#new_ic 
+0

Можете ли вы разместить выходные маршруты рейка? – dax

ответ

1

Одна из проблем заключаются в этой строке:

<%= link_to 'IC', 'new_ic' %> 

link_to должен выглядеть следующим образом:

link_to "Profile", profile_path(@profile) 
#Profile is the name 
#profile_path(@profile) is the link 

Попробуйте вместо этого:

#parts/new.html.erb 
<%= link_to 'IC', root_path %> 

в маршрутах, root GET / parts#new_ic ссылаются на ваш new_ic действий. Я бы не согласился с тем, как вы к нему обращаетесь (через root), но он будет работать, если вы хотите получить доступ к действию new_ic. Почему это ваш корневой путь?

+0

что будет new_ic_path? – smd75jr

+0

Если вы посмотрите на вывод 'rake routes',' new_ic' должен быть путь, обозначенный для 'paths # new', и вы напишите ссылку на этот путь с помощью' new_ic_path' - на самом деле только что увидели ваше обновление, изменится ответ – dax

+0

проблема заключается в том, что у меня будет несколько различных форм для разных типов компонентов (например, резисторы и конденсаторы и т. д.), поэтому я хочу, чтобы части/новая страница содержали ссылки на разные формы (например, new_ic) – smd75jr

Смежные вопросы