2014-10-26 71 views
0

我正在使用设计用于在rails中进行用户验证。 我有2种型号在我的Rails应用程序: -控制器和视图中的导轨关联混淆

class User < ActiveRecord::Base 

    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

    has_one :userdetails 
end 

而且

class Userdetail < ActiveRecord::Base 
    belongs_to :user 
end 

在user_detail控制,我试过

def new 
    @userdetail = Userdetail.new 

end 

我在 “的UserDetails” 表中创建一个user_id列与“用户”表中的ID列关联。

但是,当我更新userdetail的值user_id字段保持为空。

我有点困惑,为了设置当前登录用户的user_id,我必须在“Controller”,“view”和“Routes.rb”中编写。 因为我是RoR和stackoverflow的新手,如果我错过了提供任何信息,请告诉我。

+0

重命名'userdetail'到'profile',就是一个字,只是一个建议。你不会混淆单数和复数,就像你现在所拥有的:'has_one:something_in_plural',那很奇怪。 – juanpastas 2014-10-30 20:34:42

+0

感谢您的建议 – Adt 2014-11-01 15:07:51

回答

0

实例化一个UserDetails记录用户的正确的方法是:

def new 
    @userdetail = current_user.userdetails.build 
end 

您还需要对用户进行认证,以确保他登录了,这也使得可current_user对象给你。您需要在您的UserDetailsController

before_action :authenticate_user! 

在你create行动必须遵循同样的原则下before_action

def create 
    @userdetail = current_user.userdetails.build(user_details_params) 
    if @userdetail.save 
    #...rest of the code 
    end 
end