2016-08-03 133 views
1

我需要添加到我的用户新obob一些新的属性,我将定义何时通过从我的数据库检索他们submited,但是当我submited新属性是n,我不知道为什么Ruby on rails新对象属性

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 

这里是用户PARAMS

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

回答

1

这里是做什么的?

这样做:

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

如果使用或@plan_vars返回数组有结果的另一个错误类型的嵌套形式

+0

奏效完美!非常感谢! – mdiaz00147

+0

好的,然后接受答案。鼓励让我在未来帮助。 –

0

您可以合并计划PARAMS到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 

希望,这有助于!

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的回答也是一个不错的选择