如何关联这些模型?

时间:2012-03-09 10:44:53

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

我尝试了很多方法以良好和干净的方式关联这些模型,但像往常一样,我正在做一些我看不到的傻事。拜托,有人可以帮帮我吗?

用户模型

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>

2 个答案:

答案 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动作中正确创建嵌套资源。