1

我創建了一個表格,使用scaffold,然後創建Models來製作一個nested model但我的瀏覽器出現錯誤,我無法解決它,我在這裏尋找幫助,這個錯誤:未定義的局部變量或方法`城市'ROR

NameError in Clients#new 
    line #33 raised: 

undefined local variable or method `city' for #<#<Class:0xc4fb5bc>:0xb704f94> 

Extracted source (around line #33): 

30:  <% end %> 
31: </div> 
32: <div class="field"> 
33:  <%= city.fields_for :street do |street| %> 
34:  <%= street.label :street %> 
35:  <%= street.text_field :name %> 
36:  <% end %> 

Client.rb

class Client < ActiveRecord::Base 
    attr_accessible :email, :name 
    has_one :city 
    accepts_nested_attributes_for :city 
end 

city.rb

class City < ActiveRecord::Base 
    attr_accessible :client_id, :name 
    belongs_to :client 
    has_many :streets 
    accepts_nested_attributes_for :streets 
end 

[由腳手架生成]

def new 
    @client = Client.new 
    @city = @client.build_city 
    @street = @city.build_street # I don't know should I add this line or not 

    respond_to do |format| 
     format.html # new.html.erb 
     format.json { render json: @client } 
    end 

    end 

形式street.rb

class Street < ActiveRecord::Base 
    attr_accessible :city_id, :name 
    belongs_to :city 
end 

clients_controller.rb

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

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

    <div class="field"> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </div> 
    <div class="field"> 
    <%= f.label :email %><br /> 
    <%= f.text_field :email %> 
    </div> 
    <div class="field"> 
    <%= f.fields_for :city do |city| %> 
    <%= city.label :city %> 
    <%= city.text_field :name %> 
     <%= city.fields_for :street do |street| %> 
    <%= street.label :street %> 
    <%= street.text_field :name %> 
    <% end %> 
    <% end %> 
    </div> 
    <div class="field"> 

    </div> 

    <div class="actions"> 
    <%= f.submit "Submit Client", class: "btn btn-large btn-primary" %> 
    </div> 
<% end %> 

的routes.rb

resources :clients do 
    resources :cities do 
     resources :streets 
    end 
    end 

回答

0

你必須改變喲UR模式:

class City < ActiveRecord::Base 
    attr_accessible :client_id, :name 
    belongs_to :client 
    has_many :streets 
    accepts_nested_attributes_for :streets # add the "s"! 
end 

而且你必須修改_form.html.erb

<%= city.fields_for :streets do |street| %> ## add also the "s" 
    <%= street.label :street %> 
    <%= street.text_field :name %> 
<% end %> 

而且你還必須修改您的控制器像mind.blank他回答說。

順便說一句,也許這可以幫助您在一般的理解accepts_nested_attributes_for好一點..

+0

我沒有和我的客戶得到了以下NameError#新 /_form.html.erb其中線#29提出: 未定義的局部變量或方法'城市」爲#<#<類別:0xb9b0e8c> :0xb9aeed4> 提取的源(圍繞線#29): 26:\t <% end %> 27:

28: 29:\t <%= city.fields_for:街道做|街道| %> 30:\t <%= street.label:街道%> 31:\t <%= street.text_field:名稱%> 32:\t <% end %> – 2013-05-04 14:52:21

+0

我修改了我的答案 – Mattherick 2013-05-04 14:56:56

+0

它提出了同樣的錯誤 – 2013-05-04 15:02:00

0

還要確保您使用build_associationhas_one協會,associations.buildhas_many

# has_one :city 
@city = @client.build_city 

# has_many :streets 
@street = @city.streets.build 
相關問題