2011-07-29 63 views
5

Tôi có một cấu trúc mô hình lồng nhau trông như thế này:Biểu mẫu lồng nhau không hiển thị!

resources :users, :path => '/' do 
    resources :accounts do 
     resources :characters 
    end 
end 

Tôi đang cố gắng để có được những trang accounts#new để hiển thị cả các hình thức nhưng đối với một số lý do duy nhất dưới dạng các tài khoản sẽ được hiển thị (screenshot).

Đây là git: https://github.com/imjp/d2shed

account.rb

class Account < ActiveRecord::Base 
attr_accessible :account_name, :realm 
accepts_nested_attributes_for :characters 

belongs_to :user 
has_many :characters, :dependent => :destroy 

validates :account_name, :presence => 'true', 
        :length => { :in => 4..20 }, 
        :uniqueness => 'true' 

validates_presence_of :realm 
validates_format_of :account_name, :with => /^[A-Za-z\d_]+$/ 
end 



accounts_controller.rb

def new 
    @user = User.find(params[:user_id]) 
    @account = Account.new 
    @account.characters.build 
end 



_form.html.erb

<%= form_for([@user, @account]) do |f| %> 
<div class="field"> 
<%= f.label :account_name %><br /> 
<%= f.text_field :account_name %> 
</div> 
<div class="field"> 
<%= f.radio_button(:realm, "USWest") %> 
    <%= f.label(:realm, "USWest") %> 

    <%= f.radio_button(:realm, "USEast") %> 
    <%= f.label(:realm, "USEast") %> 

    <%= f.radio_button(:realm, "Europe") %> 
    <%= f.label(:realm, "Europe") %> 

    <%= f.radio_button(:realm, "Asia") %> 
    <%= f.label(:realm, "Asia") %> 
</div>  

<%= f.fields_for :character do |character_form| %> 

     <div class="field"> 
      Name: <%= character_form.text_field :name %> 
     </div> 
    <% end %> 

<div class="actions"> 
<%= f.submit %> 
</div> 
<% end %> 

EDIT: Mã này hoạt động bây giờ!

Trả lời

7

Tại sao bạn làm fields_for ".."?

Điều bạn muốn làm là <%= f.fields_for :characters %> vì điều đó sẽ lặp qua tất cả các ký tự và hiển thị các trường theo yêu cầu trong biểu mẫu tài khoản. Bằng cách gọi số fields_for trên đối tượng f, bạn đang cho biết biểu mẫu gốc có chứa thuộc tính lồng nhau.

Thứ hai, bạn sẽ cần phải sử dụng đối tượng @account trong biểu mẫu của mình thay vì tạo một đối tượng khác với @user.accounts.build. Bằng cách làm điều này sai, bạn đang thực sự tạo một đối tượng tài khoản mới mà sẽ không có bất kỳ đối tượng ký tự nào được tạo sẵn cho nó.

Ngoài ra, bạn cần phải chỉ định accepts_nested_attributes_for :characters trong mô hình Account của mình để biểu mẫu chấp nhận chúng cùng với thông số tài khoản.

+0

Xin cảm ơn bạn đã trả lời! Tôi đã sửa đổi mã nhưng nó vẫn không hoạt động:/Tôi đã chỉnh sửa câu hỏi của mình để cập nhật mã. Bạn có thể xem xét những gì khác có thể bị thiếu? – imjp

+0

@imjp: Nếu bạn làm rõ những gì "vẫn không hoạt động" thì có lẽ có. –

+0

@imjp: Thực ra tôi nhận thấy bạn đã mắc lỗi trong biểu mẫu của bạn. Đoạn giữa trong câu trả lời của tôi sửa lỗi đó. –

Các vấn đề liên quan