新手问题 虚拟属性的 属性名= 方法不执行

mexiqq · 2015年05月29日 · 最后由 zerzerheart 回复于 2015年12月04日 · 1872 次阅读

user.rb 定义了 password 虚拟属性

user.html.erb 定义了虚拟属性表单

然而输出了一下 password= 那个方法没有执行....23333

请指教

赋值的那段代码贴一下

#1 楼 @lance_zyb password= 这个方法不是自动触发的吗???没有赋值的地方

@mexiqq 你是这样创建 user=User.new use_params 的么?

#3 楼 @lance_zyb 在 rails 里这样创建的,应该不是这里的问题,因为现在是虚拟属性的赋值方法得不到执行,导致我的实际数据库属性无法赋值,从而 new 一个 user 时,除了 name 这个都有的属性,其他的实际数据库属性值都无法被赋值

rails 4 么?params.permit 有写上 password 么?

#6 楼 @lance_zyb no no no . 小哥,我说的是虚拟属性的赋值方法无法执行,跟实际数据库属性字段没有关系

@mexiqq 不晓得我是否理解错,你说的【虚拟属性的赋值方法无法执行】是指:user = User.new(user_params)时,user.password #=> nil

如果是的话,输出 user_params 看下

def create
  p user_params
  @user = User.new(user_params)
  ...
end

如果理解错了,那我黔驴技穷了。

#8 楼 @lance_zyb 小哥,我再问一下,是这样的,如果我提交一个 user 的表单,user 这个 model 里有 password 和 password_cofirmation 然而 user 的数据库只有 hashed_password(由 password hash 计算的来),表单 post 之后提交到 user_controller 中的 new 或 create 方法,这时如果我想要让虚拟属性被赋值,是否 在.permit() 中要加虚拟属性的名字 即 .permit(:password)

#8 楼 @lance_zyb 试了一下,果然是,谢谢了

上面的情况是

楼主你的 vim 配色是什么,真好看

需要 登录 后方可回复, 如果你还没有账号请 注册新账号