2012-04-11 35 views
1

我不明白为什么我得到一个nil错误下面。但是,当我添加self时,我没有收到错误,并且所有内容都得到了更正。你可以向我解释为什么如果我不使用self这不起作用?在轨道上使用ruby中的数据库字段更新自我

型号/ user.rb

def update_user_email!(new_email) 
    email = new_email # When I use self.name = new_email this works 
end 

控制器/ users_controller

def create 
    @user = User.new(params[:user]) 
    @user.update_user_email!(email) 
    @user.save 
end 

感谢

回答

2

当你在一个方法的模型里面,如果你只使用属性名称它会将它视为一个变量,范围仅限于此方法。使用self.attribute实际上将访问模型中的底层字段并让您分配值。

作为一项基本规则,任何你实际上是在模型分配值的时候,你应该总是使用

self.attribute = value 

在一个侧面来看,我不知道,如果你的代码是仅仅作为例子,但它不喜欢看你需要的方法。

在控制器,你可以只是做

@user.email = email 
相关问题