Ruby on rails 如何创建嵌套模型表单

Ruby on rails 如何创建嵌套模型表单,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-3.1,ruby-on-rails-3.2,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 3.1,Ruby On Rails 3.2,我只是不确定如何构建嵌套表单。我关注过Ryan Railscasts,但我不确定如何在我的案例中创建新实例 我有以下型号 Customer, Book Manager, and Book 他的关系也随之而来 Customer has_many :book_managers, :dependent => :destroy accepts_nested_attributes_for :book_managers Book belongs_to :book_manage

我只是不确定如何构建嵌套表单。我关注过Ryan Railscasts,但我不确定如何在我的案例中创建新实例

我有以下型号

Customer,
Book Manager, and
Book
他的关系也随之而来

Customer
    has_many :book_managers, :dependent => :destroy
    accepts_nested_attributes_for :book_managers
Book
    belongs_to :book_manager
    def customer
        book_manager.customer
    end
Book_Manager
    belongs_to :customer
    has_many :books, :dependent => :destroy
<%= form_for @bookmanager do |f| %>
  <%= f.fields_for :books, Book.new do |builder| %>
  <div>
    <%= builder.label :description %><br />
    <%= builder.text_area :description, :rows => 3 %>
  </div>
  <% end %>
  <div class="field">  
    <%= f.label :visible %><br />  
    <%= f.text_field :visible %>  
  </div>  
  <div class="actions">
    <%= f.submit %>
  </div>  
<% end %> 
他的形式如下

Customer
    has_many :book_managers, :dependent => :destroy
    accepts_nested_attributes_for :book_managers
Book
    belongs_to :book_manager
    def customer
        book_manager.customer
    end
Book_Manager
    belongs_to :customer
    has_many :books, :dependent => :destroy
<%= form_for @bookmanager do |f| %>
  <%= f.fields_for :books, Book.new do |builder| %>
  <div>
    <%= builder.label :description %><br />
    <%= builder.text_area :description, :rows => 3 %>
  </div>
  <% end %>
  <div class="field">  
    <%= f.label :visible %><br />  
    <%= f.text_field :visible %>  
  </div>  
  <div class="actions">
    <%= f.submit %>
  </div>  
<% end %> 
我也尝试以下方法

@customer = Customer.find(params[:id])
@bookmanager = @customer.book_managers.build 
它不起作用,也不确定如何建立关系。感谢您的帮助

这里是我在rails c中执行的查询

cust = Customer.first
cust.book_managers.build :visible => true
cust.book_managers.first.books.build :description => 'the odyssey'
cust.save!
看起来还好,然后我做了以下检查

cust = Customer.find 1
cust.books              ### This is where the error was given to me
Book.first.customer
错误是

NoMethodError: undefined method `books' for #<Customer:0xad55afc>
NoMethodError:未定义的方法“books”#

您应该使用has\u many:through:关系

class客户:销毁
有很多:书籍,:至=>:书籍管理者
接受书籍管理器的\u嵌套\u属性\u
结束
类BookManager:销毁
结束
类目

您可以阅读更多内容

它是否在您的控制台上显示错误?现在显示错误。我将按照Railscasts教程更新显示错误的外观我不应该从customer->books添加关系。但其他许多人似乎都建议这样做。最好的方法是什么,我应该如何创建一个新项目。我对ruby是如何工作的感到非常困惑。如果你需要像这样的东西:
cust=Customer.find(1)
cust.books
你需要在
Customer
模型a
中有很多:books
关系。这将解决我的控制台问题,但它并没有以一种形式解决图书和图书管理器的创建问题。我怎么能这样做?