浏览 1136 次
|
锁定老贴子 主题:我的一个字段总保存不到数据库中,给看一下
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
时间:2007-04-28
看看这一段代码有什么问题么?我的@teacher.power保存到数据库总是NULL:
创建的代码:
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
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
| 返回顶楼 | |
|
时间: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我感觉不是上策。 |
|
| 返回顶楼 | |







