论坛首页 编程语言技术论坛

我的一个字段总保存不到数据库中,给看一下

浏览 3321 次
精华帖 (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
   发表时间: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.
0 请登录后投票
   发表时间: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
0 请登录后投票
   发表时间: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

结果成功了。不过还不明白为什么?
0 请登录后投票
   发表时间:2007-04-28  

@teacher = Teacher.new(params[:teacher])
if Teacher.count==0 then
  @teacher.power = 3
else
  @teacher.power = 0
end


我觉得这样也可以.

改变 params 不行,我觉得是 params 是只能读的,改是无效的.
0 请登录后投票
   发表时间:2007-04-29  
楼主这个也太无聊了, 何苦为了只有一次的情况去弄一个if-else
你就不能在deploy的时候直接插入第一条记录??????
0 请登录后投票
   发表时间:2007-04-29  
youngng 写道
楼主这个也太无聊了, 何苦为了只有一次的情况去弄一个if-else
你就不能在deploy的时候直接插入第一条记录??????


这样也是,省着查询和判断,我本来也是想这么做的,关键是做毕业设计,
答辩的时候得把这个部署到实验室的机器上演示,由于有很多模块,部
署的时候很容易忘了这些小的细节,而使这部分的功能不好用。
我这么做主要想让部署方便些,况且这点在性能上也不会带来什么的影响。
0 请登录后投票
   发表时间:2007-04-29  
fuliang 写道
youngng 写道
楼主这个也太无聊了, 何苦为了只有一次的情况去弄一个if-else
你就不能在deploy的时候直接插入第一条记录??????


这样也是,省着查询和判断,我本来也是想这么做的,关键是做毕业设计,
答辩的时候得把这个部署到实验室的机器上演示,由于有很多模块,部
署的时候很容易忘了这些小的细节,而使这部分的功能不好用。
我这么做主要想让部署方便些,况且这点在性能上也不会带来什么的影响。


自动生成admin更方便吧, 又不是要你去手动用mysql插入数据.你不是用rake db:migrate的么? 在那些文件
里写上一条插入语句就行了.你忘记不要紧, 文件是不会忘记的. 这样一来, 你还减少一个部署步骤了.

而且,自动生成一个admin用户, 这种做法是十分常见的, 这跟你设置一些初始化数据一样的. 因为admin是
一个特殊角色, 你没必要,也不该像一般用户那样去对待它. 完全可以把它当成系统的一部分.
0 请登录后投票
   发表时间:2007-04-30  
youngng 写道
fuliang 写道
youngng 写道
楼主这个也太无聊了, 何苦为了只有一次的情况去弄一个if-else
你就不能在deploy的时候直接插入第一条记录??????


这样也是,省着查询和判断,我本来也是想这么做的,关键是做毕业设计,
答辩的时候得把这个部署到实验室的机器上演示,由于有很多模块,部
署的时候很容易忘了这些小的细节,而使这部分的功能不好用。
我这么做主要想让部署方便些,况且这点在性能上也不会带来什么的影响。


自动生成admin更方便吧, 又不是要你去手动用mysql插入数据.你不是用rake db:migrate的么? 在那些文件
里写上一条插入语句就行了.你忘记不要紧, 文件是不会忘记的. 这样一来, 你还减少一个部署步骤了.

而且,自动生成一个admin用户, 这种做法是十分常见的, 这跟你设置一些初始化数据一样的. 因为admin是
一个特殊角色, 你没必要,也不该像一般用户那样去对待它. 完全可以把它当成系统的一部分.

在migration中写插入一个admin,我怕安全上有问题,因为你需要在migration中插入包括密码等
一些敏感数据,这样会暴露admin的信息特别是密码,而在数据库中密码是已经加密的。所以我觉
得在migration做插入一些测试数据的操作可以,像插入admin我感觉不是上策。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics