2011-10-13 41 views
5

Tôi đang tạo mối quan hệ một-một với người dùng được gọi là user_info. Dưới đây là giải pháp làm việc.Rails 3: Devise with has_one, các thuộc tính lồng nhau không được cập nhật

Trong user.rb

has_one :user_info 
accepts_nested_attributes_for :user_info, :allow_destroy => true 
attr_accessible :username, :email, :password, :password_confirmation, :remember_me, :user_info_attributes 

Trong user_info.rb

belongs_to :user 
attr_accessible :first_name, :last_name 

Trong devise/đăng ký/edit.html.erb

<% resource.build_user_info if resource.user_info.nil? %> 
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f| %> 
    ... 
    <%= f.fields_for :user_info do |info| %> 
     <%= info.text_field :first_name %> 

Tôi hiểu rằng tôi không nên bao gồm xây dựng trong chế độ xem. Nhưng tôi không muốn 'chạm' bộ điều khiển hoặc mô hình phát triển. Đây là cách dễ dàng nhất.

+0

Hóa ra rằng dòng build không hoạt động đúng. Nên là '<% resource.build_user_info nếu resource.user_info.nil? %> ' –

Trả lời

3

Hóa ra rằng dòng build không hoạt động đúng trong giao diện.

nên là: <% resource.build_user_info if resource.user_info.nil? %>

1

Hãy thử :autosave => true theo yêu cầu của bạn để accepts_nested_attributes_for

+0

Nên được thêm vào' has_one: user_info,: autosave => true' thay vì 'accepts_nested attributes_for'. Tuy nhiên, điều này vẫn không hoạt động. Nó không lưu first_name. –

+0

Hmm, ok, tại sao bạn không chỉ thêm thông tin vào mô hình người dùng hiện tại? Đó sẽ là cách đơn giản nhất để làm điều đó. – janders223

+2

Nó không phải là mô hình tốt để làm cho một mô hình người dùng lớn. Thông thường, mô hình người dùng bao gồm nhiều thông tin phụ như trang web, địa chỉ, về tôi, sở thích, v.v. Đặt nó vào cùng một mô hình có nghĩa là mỗi lần bạn chỉ cần kéo danh sách người dùng hoặc bất kỳ thao tác xác thực nào, bạn phải kéo mọi thứ khác. Đó là thực hành phổ biến và tốt để chia thành 2 mô hình với mối quan hệ một-một. –

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