我尝试了很多方法以良好和干净的方式关联这些模型,但像往常一样,我正在做一些我看不到的傻事。拜托,有人可以帮帮我吗?
用户模型
class User < ActiveRecord::Base
has_one :house, :dependent => :destroy
accepts_nested_attributes_for :house, :allow_destroy => true
end
房屋模型
class House < ActiveRecord::Base
belongs_to :user
belongs-to :type
end
输入型号
class Type < ActiveRecord::Base
has_many :houses
accepts_nested_attributes_for :houses
end
输入控制器
class TypesController < ApplicationController
def new
@type = Type.new
end
def create
@type = Type.new(params[:type])
@type.houses = current_user.house
if @type.save
redirect_to edit_house_path
flash[:success] = "yeah"
else
render :new
end
end
end
输入new_view
<div>
<%= form_for @type, :url => types_path, :method => :post do |t| %>
<%= t.fields_for :house do |h| %>
<%= h.label :name %><%= h.text_field :name %>
<% end %>
<ul>
<li>test_1:<%= t.radio_button :kind, "test_1" %></li>
<li>test_2:<%= t.radio_button :kind, "test_2" %></li>
<li>test_3:<%= t.radio_button :kind, "test_3" %></li>
</ul>
<%= t.submit "create", :class => "blue" %>
<% end %>
</div>
答案 0 :(得分:2)
你需要在field_for中使用关联的命名,所以它是
<%= t.fields_for :houses do |h| %>
而不是
<%= t.fields_for :house do |h| %>
答案 1 :(得分:1)
如果问题是在创建类型时类型对象中的嵌套房子不存在,则在显示new_type表单之前,您需要在新操作中添加以下内容:
@type.houses.build(:user_id => current_user.id)
这将允许您的fields_for表单元素工作,@ type.save函数可以在create动作中正确创建嵌套资源。