2013-12-18 21 views
0

以下幾個不同的導遊,我仍然與其他酒店的形式嵌套在一個模型地址越來越麻煩了。 我可以得到工作表之前創建分貝行爲酒店,但沒有一個爲地址。在這條線NilClass :我添加 後@ hotel.addrs.build我的控制,我得到一個錯誤(滑軌4.0.1)「HAS_ONE」嵌套模式不工作

未定義的方法`建設」爲爲零。

我的代碼:

hotels.rb

class Hotel < ActiveRecord::Base 
    has_one :addrs 
    accepts_nested_attributes_for :addrs 
end 

addr.rb

class Addr < ActiveRecord::Base 
    belongs_to :hotel 
end 

hotels_controller.rb

def new 
    @hotel = Hotel.new 
    @hotel.addrs.build 
end 
... 
def hotel_params 
    params.require(:hotel).permit(:name, :rate, addrs_atributes: [:street, :build]) 
end 

路線.RB

resources :hotels do 
    resources :addr 
end 

_form.erb.html

... </div> 
<%= fields_for :addr do |l| %> 
    Street <%= l.text_field :street %><br> 
    No. <%= l.number_field :build %> 
<% end %> 
<div class="actions"> 
    <%= f.submit %> 
</div> 

請有什麼建議可能是錯在這裏。 謝謝。

+1

不應該是'has_one:addr' - 複數對'has_many'而不是'has_one'更合乎邏輯。當然,自從我使用Rails以來,這已經有一段時間了,這可能是瘋狂的談話...... – glenatron

回答

2

它應該是

has_one :addr 
accepts_nested_attributes_for :addr 

在控制器新的動作

@hotel.build_addr 
在hotel_params

params.require(:hotel).permit(:name, :rate, addr_atributes: [:street, :build]) 

鑑於

<%= f.fields_for :addr do |addr|%> 

<%end%> 
+0

謝謝NitinJ。 Ofcourse它應該是addr而不是addrs。但是我也遇到了addr的麻煩。 無論如何,我所做的一切,你建議,現在我在@ hotel.build_addr行控制器上得到「未知屬性:hotel_id」。 – user3115061

+0

你會在該行之前寫下@hotel = Hotel.new。你還有addr表中的hotel_id字段嗎? –

+0

@hotel = Hotel.new在那裏。我剛剛添加「t.integer:hotel_id」行到create_addrs.rb表 - 我得到同樣的問題。 – user3115061