浏览 3321 次
锁定老帖子 主题:我的一个字段总保存不到数据库中,给看一下
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-04-28
创建的代码: def create count = Teacher.count if count == 0 #第一个注册者拥有最高权限3,自动为管理员 params[:teacher][:power] = 3 else params[:teacher][:power] = 0 #其他的拥有最低权限0,等待管理员管理权限 end @teacher = Teacher.new(params[:teacher]) if @teacher.save flash[:notice] = "Teacher was successfully created" redirect_to :action => :login else redirect_to :action => :new end end 表单: <%= error_messages_for 'teacher' %> <table> <tr> <td><label for="teacher_name">姓名:</label></td> <td><%= text_field 'teacher','name'%></td> </tr> <tr> <td> <label for="teacher_display_name">昵称:</label></td> <td><%= text_field 'teacher','display_name' %></td> </tr> <tr> <td> <label for="teacher_password">密码:</label></td> <td><%= password_field 'teacher','password' %></td> </tr> <tr> <td> <label for="teacher_password_confirmation">再次输入密码:</label></td> <td><%= password_field 'teacher','password_confirmation' %></td> </tr> <%= hidden_field 'teacher','power'%> </table> 数据库中Teachers的schema: create_table "teachers", :force => true do |t| t.column "name", :string t.column "display_name", :string t.column "password", :string t.column "power", :integer end 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-04-28
I'm just wondering why do you do that...
@teacher = Teacher.new(params[:teacher]) teacher.power = 3 if Teacher.count == 0 Furthermore, the second line should be in the Teacher class. |
|
返回顶楼 | |
发表时间:2007-04-28
gigix 写道 I'm just wondering why do you do that...
@teacher = Teacher.new(params[:teacher]) teacher.power = 3 if Teacher.count == 0 Furthermore, the second line should be in the Teacher class. 我开始这么写的 不过也没有保存上 我看日志中产生一个sql: SELECT * FROM teachers WHERE (teachers.name = 'fuliang') LIMIT 1 我觉得teacher.power不应该去查询,但我确实不知道为什么有这个查询 我于是修改了params,然后再new 但现在还有这么一句sql |
|
返回顶楼 | |
发表时间:2007-04-28
gigix 写道 I'm just wondering why do you do that...
@teacher = Teacher.new(params[:teacher]) teacher.power = 3 if Teacher.count == 0 Furthermore, the second line should be in the Teacher class. 我像你说的那样重构了一下: Teacher中增加了: def init_power if Teacher.count == 0 self.power = 3 else self.power = 0 end end 原来的create修改成这样的: def create @teacher = Teacher.new(params[:teacher]) @teacher.init_power if @teacher.save flash[:notice] = "Teacher was successfully created" redirect_to :action => :login else redirect_to :action => :new end end 结果成功了。不过还不明白为什么? |
|
返回顶楼 | |
发表时间:2007-04-28
@teacher = Teacher.new(params[:teacher]) if Teacher.count==0 then @teacher.power = 3 else @teacher.power = 0 end 我觉得这样也可以. 改变 params 不行,我觉得是 params 是只能读的,改是无效的. |
|
返回顶楼 | |
发表时间:2007-04-29
楼主这个也太无聊了, 何苦为了只有一次的情况去弄一个if-else
你就不能在deploy的时候直接插入第一条记录?????? |
|
返回顶楼 | |
发表时间:2007-04-29
youngng 写道 楼主这个也太无聊了, 何苦为了只有一次的情况去弄一个if-else
你就不能在deploy的时候直接插入第一条记录?????? 这样也是,省着查询和判断,我本来也是想这么做的,关键是做毕业设计, 答辩的时候得把这个部署到实验室的机器上演示,由于有很多模块,部 署的时候很容易忘了这些小的细节,而使这部分的功能不好用。 我这么做主要想让部署方便些,况且这点在性能上也不会带来什么的影响。 |
|
返回顶楼 | |
发表时间:2007-04-29
fuliang 写道 youngng 写道 楼主这个也太无聊了, 何苦为了只有一次的情况去弄一个if-else
你就不能在deploy的时候直接插入第一条记录?????? 这样也是,省着查询和判断,我本来也是想这么做的,关键是做毕业设计, 答辩的时候得把这个部署到实验室的机器上演示,由于有很多模块,部 署的时候很容易忘了这些小的细节,而使这部分的功能不好用。 我这么做主要想让部署方便些,况且这点在性能上也不会带来什么的影响。 自动生成admin更方便吧, 又不是要你去手动用mysql插入数据.你不是用rake db:migrate的么? 在那些文件 里写上一条插入语句就行了.你忘记不要紧, 文件是不会忘记的. 这样一来, 你还减少一个部署步骤了. 而且,自动生成一个admin用户, 这种做法是十分常见的, 这跟你设置一些初始化数据一样的. 因为admin是 一个特殊角色, 你没必要,也不该像一般用户那样去对待它. 完全可以把它当成系统的一部分. |
|
返回顶楼 | |
发表时间:2007-04-30
youngng 写道 fuliang 写道 youngng 写道 楼主这个也太无聊了, 何苦为了只有一次的情况去弄一个if-else
你就不能在deploy的时候直接插入第一条记录?????? 这样也是,省着查询和判断,我本来也是想这么做的,关键是做毕业设计, 答辩的时候得把这个部署到实验室的机器上演示,由于有很多模块,部 署的时候很容易忘了这些小的细节,而使这部分的功能不好用。 我这么做主要想让部署方便些,况且这点在性能上也不会带来什么的影响。 自动生成admin更方便吧, 又不是要你去手动用mysql插入数据.你不是用rake db:migrate的么? 在那些文件 里写上一条插入语句就行了.你忘记不要紧, 文件是不会忘记的. 这样一来, 你还减少一个部署步骤了. 而且,自动生成一个admin用户, 这种做法是十分常见的, 这跟你设置一些初始化数据一样的. 因为admin是 一个特殊角色, 你没必要,也不该像一般用户那样去对待它. 完全可以把它当成系统的一部分. 在migration中写插入一个admin,我怕安全上有问题,因为你需要在migration中插入包括密码等 一些敏感数据,这样会暴露admin的信息特别是密码,而在数据库中密码是已经加密的。所以我觉 得在migration做插入一些测试数据的操作可以,像插入admin我感觉不是上策。 |
|
返回顶楼 | |