在遵循几个不同的指南之后,我仍然在其他酒店的形式中嵌套一个模型 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>
请在此处说明可能出现的问题。 感谢。
答案 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%>