Rails在控制器和视图中的混淆

时间:2014-10-26 18:56:37

标签: ruby-on-rails

我在rails中使用设计进行用户身份验证。 我的rails应用程序中有2个模型: -

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

我在&#34; userdetails&#34;中创建了一个user_id列。与&#34;用户&#34;中的ID列关联的表表

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

我有点困惑我要写的内容&#34; Controller&#34;,&#34; view&#34;和&#34; Routes.rb&#34;为了设置当前登录用户的user_id。 由于我是RoR和stackoverflow的新手,如果我错过了提供任何信息,请建议我。

1 个答案:

答案 0 :(得分:0)

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

def new
   @userdetail = current_user.userdetails.build
end

您还需要对用户进行身份验证,以确保他已登录,这也使current_user对象可供您使用。您需要在before_action

中加入以下UserDetailsController
before_action :authenticate_user!

create行动中,您必须遵循相同的原则:

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