2016-12-06 36 views
0

我已經定義了以下資源:嵌套資源只工作不編輯新,導軌5.0.0.1

resources :buildings do 
    resources :buildings_regular_hours 
end 

我的模型是如下:

class Building < ApplicationRecord 
    has_many :building_regular_hours 

    def to_s 
    name 
    end 
end 

class BuildingsRegularHours < ApplicationRecord 
    belongs_to :building 
end 

我試圖創建一個表單允許創建和編輯BuildingRegularHours。目前我的表單將顯示在#edit上,但不會顯示在#new上。

new.html.erb:

<%= render 'form', buildings_regular_hour: @buildings_regular_hour, building: @building %> 

edit.html.erb:

<h1>Editing Buildings Regular Hour</h1> 

<%= render 'form', buildings_regular_hour: @buildings_regular_hour, building: @building %> 

<%= link_to 'Back', building_buildings_regular_hour_path(@building) %> 

_form.html.erb:

<%= form_for([building,buildings_regular_hour]) do |f| %> 
    <% if buildings_regular_hour.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(buildings_regular_hour.errors.count, "error") %> prohibited this buildings_regular_hour from being saved:</h2> 

     <ul> 
     <% buildings_regular_hour.errors.full_messages.each do |message| %> 
     <li><%= message %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :building_id %> 
    <%= f.text_field :building_id %> 
    </div> 

    <div class="field"> 
    <%= f.label :start_date %> 
    <%= f.date_select :start_date %> 
    </div> 

    <div class="field"> 
    <%= f.label :end_date %> 
    <%= f.date_select :end_date %> 
    </div> 

    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

buildings_regular_hours_controller.rb:

class BuildingsRegularHoursController < ApplicationController 
    before_action :set_buildings_regular_hour, only: [:show, :edit, :update, :destroy] 
    before_action :set_building 

    # GET /buildings_regular_hours 
    # GET /buildings_regular_hours.json 
    def index 
    @buildings_regular_hours = BuildingsRegularHours.all 
    end 

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

    # GET /buildings_regular_hours/new 
    def new 
    @buildings_regular_hour = BuildingsRegularHours.new 
    end 

    # GET /buildings_regular_hours/1/edit 
    def edit 
    end 

    # POST /buildings_regular_hours 
    # POST /buildings_regular_hours.json 
    def create 
    @buildings_regular_hour = BuildingsRegularHours.new(buildings_regular_hour_params) 

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

    # PATCH/PUT /buildings_regular_hours/1 
    # PATCH/PUT /buildings_regular_hours/1.json 
    def update 
    respond_to do |format| 
     if @buildings_regular_hour.update(buildings_regular_hour_params) 
     format.html { redirect_to @buildings_regular_hour, notice: 'Buildings regular hours was successfully updated.' } 
     format.json { render :show, status: :ok, location: @buildings_regular_hour } 
     else 
     format.html { render :edit } 
     format.json { render json: @buildings_regular_hour.errors,  status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /buildings_regular_hours/1 
    # DELETE /buildings_regular_hours/1.json 
    def destroy 
    @buildings_regular_hour.destroy 
    respond_to do |format| 
     format.html { redirect_to buildings_regular_hours_index_url, notice: 'Buildings regular hours was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

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

    def set_building 
     @building = Building.find(params[:building_id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def buildings_regular_hour_params 
     params.require(:buildings_regular_hour).permit(:building_id, :start_date, :end_date, :sunday_id, :monday_id, :tuesday_id, :wednesday_id, :thursday_id, :friday_id, :saturday_id) 
    end 
end 

通過控制檯添加了BuildingRegularHours後,我嘗試了#edit操作,它工作得很好,按預期顯示窗體。然而,當我嘗試#new行動,我收到以下錯誤:

Showing /Users/shawn/Documents/uga/library_hours/app/views/buildings_regular_hours/_form.html.erb where line #1 raised: 

undefined method `building_buildings_regular_hours_index_path` for #<#<Class:0x007fe9589e2890>:0x007fe95f9bbb30> 
Did you mean? building_buildings_regular_hours_path 
       building_buildings_regular_hour_path 
       building_buildings_regular_hours_url 
       building_buildings_regular_hour_url 
Extracted source (around line #1): 
1 <%= form_for([building,buildings_regular_hour]) do |f| %> 
2 <% if buildings_regular_hour.errors.any? %> 
3  <div id="error_explanation"> 
4  <h2><%= pluralize(buildings_regular_hour.errors.count, "error") %> prohibited this buildings_regular_hour from being saved:</h2> 
5 
6  <ul> 
Trace of template inclusion:   app/views/buildings_regular_hours/new.html.erb 

我注意,我正確的嵌套的資源在form_for標籤,既@building@building_regular_hour由控制器設定,我我以完全相同的方式撥打#edit#new。這是我以前爲了使嵌套資源工作所必須做的,因此我接下來要做的事情我有點不知所措。

請注意我還沒有試圖讓表格工作 - 我知道那裏有工作要做。我只是想讓#new顯示錶單。

回答

0

您需要更正協會

class Building < ApplicationRecord 
    has_many :buildings_regular_hours 

    def to_s 
    name 
    end 
end 

class BuildingsRegularHour < ApplicationRecord 
    belongs_to :building 
end 

型號名稱應始終爲單數BuildingsRegularHour或將創建路線和協會

+0

更改型號名稱和重命名模型文件並沒有這樣做的問題訣竅,但我仍然不確定這不是答案。我要開始乾淨,因爲我的發展已經足夠早,而且不使用複數。 –

+0

只需一次通過導軌指南 –

+0

閱讀導遊半小時將節省數小時的調試時間 –