(Rails 4.0.1)“has_one”嵌套模型不起作用

时间:2013-12-18 11:59:54

标签: ruby-on-rails ruby-on-rails-4 nested-forms fields-for

在遵循几个不同的指南之后,我仍然在其他酒店的形式中嵌套一个模型 addr 时遇到麻烦。 我可以获得工作表单,然后为酒店创建数据库行,但没有为 addr 创建一行。 我将 @ hotel.addrs.build 添加到我的控制器后,出现错误

  

nil的未定义方法`build':NilClass   在这条线上。

我的代码:

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

的routes.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 个答案:

答案 0 :(得分:2)

应该是

 has_one :addr
accepts_nested_attributes_for :addr
控制器新动作中的

 @hotel.build_addr

in hotel_params

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

在视图中

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

<%end%>