Ruby on rails新的对象属性

时间:2016-08-03 16:02:47

标签: ruby-on-rails ruby ruby-on-rails-4

我需要向我的用户添加一些新的属性,我将在表单提交时通过从我的数据库中检索它们来定义,但是当我提交新属性时,nill并且我不知道为什么

def create
  plan        =   params[:user][:plan]
  @plan_vars  =   Plan.find(plan)

    @user        = User.new(user_params, :plan_id => @plan_vars.id, :lessons => @plan_vars.lessons)
    if @user.save
        flash[:success] = "Usuario creado exitosamente"
      redirect_to   users_path
  else
        flash[:warning] =   "Ooops... algo ha fallado :O #{@user.errors}"
        redirect_to  new_user_path
    end
  end

这是用户参数

def user_params
      params.require(:user).permit(:name, :email, :phone, :document, :password,
                                   :password_confirmation)
    end

3 个答案:

答案 0 :(得分:1)

以下是该怎么做?

这样做:

@user = User.new(user_params)
@user.plan_id = @plan_vars.id
@user.lessons = @plan_vars.lessons
@user.save

如果使用嵌套表单或@plan_vars返回数组,则会产生另一种类型的错误

答案 1 :(得分:0)

您可以将计划参数合并到user_params哈希

def user_params
  params.require(:user).permit(:name, :email, :phone, :document, :password,
                               :password_confirmation)
                       .merge(plan_id: @plan_vars.id, lessons: @plan_vars.lessons)
end


def create
  plan = params[:user][:plan]
  @plan_vars = Plan.find(plan)
  @user = User.new(user_params)
end

希望,这有帮助!

答案 2 :(得分:0)

我更喜欢类似@Lavika的回答,但是在创建动作上合并

def create
  plan = params[:user][:plan]
  @plan_vars = Plan.find(plan)
  @user = User.new(user_params.merge(plan_id: @plan_vars.id, lessons: @plan_vars.lessons))
  # ...
end

@pradeep sapkota的答案也是一个不错的选择