-1

나는 초급 Ruby on rails.Application이 4 model.State, Province, District and City 있습니다.Ruby on Rails Association with model

모델

app/models/state.rb 
Class State < ActiveRecord::Base 
has_many :provinces 
end 

app/models/province.rb 
Class Province < ActiveRecord::Base 
belongs_to :state 
has_many :districts 
end 

app/models/district.rb 
Class District < ActiveRecord::Base 
belongs_to :province 
has_many :cities 
end 

app/models/city.rb 
Class City < ActiveRecord::Base 
belongs_to :district 
end 

Schema.rb

ActiveRecord::Schema.define(version: 20140714165543) do 

create_table "states", force: true do |t| 
t.string "name" 
t.datetime "created_at" 
t.datetime "updated_at" 
end 

create_table "provinces", force: true do |t| 
t.string "name" 
t.datetime "created_at" 
t.datetime "updated_at" 
t.integer "state_id" 
end 

add_index "provinces", ["state_id"], name: "index_provinces_on_state_id" 

create_table "districts", force: true do |t| 
t.string "name" 
t.datetime "created_at" 
t.datetime "updated_at" 
t.integer "province_id" 
end 

add_index "districts", ["province_id"], name: "index_districts_on_province_id" 

create_table "citys", force: true do |t| 
t.string "name" 
t.datetime "created_at" 
t.datetime "updated_at" 
t.integer "district_id" 
end 

add_index "citys", ["district_id"], name: "index_citys_on_district_id" 



end 

내가 simple_form의 gem.I을 사용하고는 모든 모델에 대한 CRUD 만들기입니다. 제 질문은

입니다. iam이 어떤 상태를 만들 때. 그러면 지방을 만들고 상태를 오류 브라우저에 할당합니다. STATE_ID은 지방에서

class ProvincesController < ApplicationController 
    #GET /Provinces/new 
    def new 
    @province = Province.new 
    end 

    # GET /provinces/1/edit 
    def edit 
    end 

    # POST /provinces 
    # POST /provinces.json 
    def create 
    @province = Province.new(province_params) 

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

_form.html.erb 전무

<%= simple_form_for(@province) do |f| %> 
    <% if @province.errors.any? %> 
    <div id="error_explanation"> 
    <h2><%= pluralize(@province.errors.count, "error") %> prohibited this province from being saved:</h2> 

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

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

    <%= f.association :state %> 

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

province_params라는 메서드가있는 것처럼 보이지 않습니다. –

+0

'def province_params' 'params.require (: province) .permit (: name)' 'end' –

+0

'form'을 제출할 때 생성 된'서버 로그 '를 보여줄 수 있습니까? – Pavan

답변

0

를 실행합니다.

def province_params 
    params.require(:province).permit(:name,:state_id) 
end 

province_params 방법을 변경

그리고 오류와 함께 당신은 #이

때문에이 라인 <%= @state.name %> 때문에 대부분의 아마 것 보여 주에

NoMethodError을 받고 은 (는) show method에 정의되어 있지 않습니다.

associated provincestate name을 표시하려고하면 <%= @province.state.name %>이어야합니다.

+1

@ Pavan에게 감사드립니다. –

+0

@ MarySmith 기꺼이 도와 드리겠습니다. – Pavan

+0

다른 질문이 있습니다. 회신은 모든 세부 정보를 업데이트합니다. 그렇다면 나는시 show.html.erb에 있는데,이 경우 디스플레이 시티가 지구, 주 및 주에 속하는 방법은 무엇입니까? –

0

proviences 테이블에 STATE_ID 필드를 추가하려면 다음 발전기를 실행하십시오. 당신이 permitted params 목록에 그것을 가지고하지 않았기 때문에

rails g migration add_state_id_to_proviences state_id:integer 

는 당신은 state_id is nil을 받고있는 이주 명령

rake db:migrate 
+0

OP가'provinces' 테이블에'state_id' 필드를 이미 가지고 있어야합니다. – Pavan

+0

예, 모두 준비되었습니다. –