2015-02-06 48 views
0

我正在使用設計,併爲用戶信息(用戶名,名字,姓氏,地址等)構建了另一個表。我想要做的是當用戶點擊他的配置文件設置(用戶模型 - > edit.html.erb視圖)以顯示user_info表中屬性的輸入字段。如何在rails 4.2上顯示嵌入的表單屬性?

class User < ActiveRecord::Base 

    has_one :user_info 

class UserInfo < ActiveRecord::Base 

    belongs_to :user 

我的形式看起來像:

<%= form_for(@user) do |f| %> 
    <%= f.label :username %> 
    <%= f.text_field :username, :placeholder => "Enter username", 

    <%= f.label :email %> 
    <%= f.text_field :email, :placeholder => "Enter email" %> 

,當然,這並不工作控制器

def edit 
    @user = User.find(params[:id]) 
    @user_info = current_user.user_info 
end 

,因爲用戶名是不是用戶的屬性,但user_info表。如果我決定打印它,@ user.user_info.username的作品,但如果我想顯示和保存特定的嵌套窗體的字段?大多數SO回覆提到如何使用嵌套表單的屬性來呈現部分內容,但是我希望能夠根據需要在需要的位置打印其中的一個或兩個。

回答

0

您可以使用同一個表User,並重寫Devise。

  1. 遷移您的信息到你的用戶表

    rails g migration add_username_to_users username:string

    rake db:migrate

  2. 生成視圖的設計

    rails g devise:views

  3. 個參數添加到設計

在你application_controller.rb

before_action :configure_permitted_parameters, if: :devise_controller? 

protected 

    def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up) do |u| 
    u.permit(:username, 
       :email, 
       :password, 
       :password_confirmation, 
       :remember_me) } 
    end 

    devise_parameter_sanitizer.for(:account_update) do |u| 
    u.permit(:username, 
       :email, 
       :password, 
       :password_confirmation, 
       :current_password) } 
    end 

    end 
  • 修改設計的觀點
  • 添加您字段位於/views/registrations/edit.html.erb和/views/registrations/new.html.e RB

    <%= f.label :username %> 
    <%= f.input :username %> 
    
    +0

    這是第一選擇,但我決定不碰裝置和後創建一個單獨的表,我可以做我想做的事情。最後,我想顯示user.user_info.username並將其保存爲嵌套模型屬性。 – Radolino 2015-02-06 21:38:02