`

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

阅读更多
看看这一段代码有什么问题么?我的@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
分享到:
评论
8 楼 fuliang 2007-04-30  
youngng 写道
fuliang 写道
youngng 写道
楼主这个也太无聊了, 何苦为了只有一次的情况去弄一个if-else
你就不能在deploy的时候直接插入第一条记录??????


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


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

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

在migration中写插入一个admin,我怕安全上有问题,因为你需要在migration中插入包括密码等
一些敏感数据,这样会暴露admin的信息特别是密码,而在数据库中密码是已经加密的。所以我觉
得在migration做插入一些测试数据的操作可以,像插入admin我感觉不是上策。
7 楼 youngng 2007-04-29  
fuliang 写道
youngng 写道
楼主这个也太无聊了, 何苦为了只有一次的情况去弄一个if-else
你就不能在deploy的时候直接插入第一条记录??????


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


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

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


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

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


我觉得这样也可以.

改变 params 不行,我觉得是 params 是只能读的,改是无效的.
3 楼 fuliang 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

结果成功了。不过还不明白为什么?
2 楼 fuliang 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
1 楼 gigix 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.

相关推荐

    图片BASE64加密保存到数据库Blob类型中(放入数据库,并取出生成图片)

    总的来说,这个示例提供了一种有效的方法来处理数据库中的图片存储,通过BASE64编码简化了数据的传输和存储,同时在数据库层面利用Blob类型保持了图片数据的完整性。不过,对于大量图片或需要安全保护的图片,更推荐...

    Powerdesigner字段备注导入到数据库

    在数据库设计中,字段备注是不可或缺的一部分。它们提供了关于数据列的附加信息,帮助开发者理解每个字段的用途,从而避免误解和错误。备注可以包括字段的业务含义、取值范围、数据格式、限制条件等,对后期的维护...

    保存rtf文件到数据库中源码

    标题“保存rtf文件到数据库中源码”暗示我们将探讨一个编程解决方案,该方案涉及读取RTF文件并将其内容存储到数据库中。VB(Visual Basic)是这个过程中的编程语言,它是一种面向对象的编程语言,常用于开发Windows...

    将Excel文件导入到数据库中或将数据库中文件导出Excel中

    以下将详细介绍如何将Excel文件导入到数据库中,以及如何将数据库中的数据导出到Excel中。 首先,将Excel文件导入数据库通常涉及到以下几个步骤: 1. 数据预处理:在Excel中整理数据,确保格式正确,无错误或缺失...

    Delphi将图片以二进制方式存储在数据库BLOB字段中.rar

    在这个特定的案例中,"Delphi将图片以二进制方式存储在数据库BLOB字段中"是一个常见的实践,用于高效、安全地保存图片数据。BLOB(Binary Large Object)字段是数据库系统中用来存储大量二进制数据的类型,非常适合...

    C#图片转换成二进制流并且保存到sql_server数据库

    在C#编程中,将图片转换为二进制流并保存到SQL Server数据库是一种常见的数据存储方式,尤其适用于处理图像、音频、视频等非结构化数据。以下将详细阐述这一过程涉及的关键知识点。 1. 图片转二进制流: 在C#中,...

    任意数据库连接、表、字段名获取

    在IT行业中,数据库连接、表名获取以及字段名获取是常见的任务,特别是在开发数据库驱动的应用程序时。...正确地连接到数据库,安全地获取和处理元数据,能够有效地支持数据库驱动的应用程序开发。

    数据库字段导出工具

    数据库字段导出工具是一款专为数据库管理和数据操作设计的实用软件。它简化了数据库中字段信息的导出和查询过程,使得用户无需深入掌握复杂的SQL语句,只需输入基础的数据库连接信息,如服务名、用户名和密码,就能...

    图片保存 Access数据库

    在实际应用中,有时我们需要将图片这类非结构化数据存储到数据库中。"图片保存Access数据库"这个主题涉及到了如何以二进制形式在Access数据库中保存图片,这对于初学者来说是一个非常实用的技能。 首先,了解图片的...

    pb保存图片到数据库

    根据给定的信息,“pb保存图片到数据库”这一主题主要涉及PowerBuilder(PB)应用程序如何将图像数据存储到数据库中。以下是对该知识点的详细解析: ### 一、PowerBuilder简介 PowerBuilder 是一款由 Sybase 公司...

    VB保存图片到数据库中.rar

    在VB(Visual Basic)编程中,将图片保存到Access数据库是一项常见的操作,特别是在构建具有多媒体功能的应用程序时...通过学习和实践这个例子,你可以掌握将图片保存到数据库的关键技术,为开发更复杂的应用奠定基础。

    C# asp.net上传图片保存到数据库中

    在C# ASP.NET环境中,将图片上传并保存到数据库中是一项常见的需求,这通常涉及到文件上传、图像处理、数据库操作等多个技术环节。本教程将详细解释这个过程。 首先,我们需要在ASP.NET网页中创建一个文件上传控件...

    C#保存文件到数据库或从数据库导出

    在C#编程中,将文件保存到数据库以及从数据库导出文件是常见的操作,尤其在数据存储、备份和传输方面。下面将详细讲解这个过程涉及的知识点。 首先,我们需要了解数据库的基本概念。数据库是一个用于存储和管理数据...

    图片保存到数据库

    在IT领域,将图片保存到数据库是一个常见的需求,尤其是在Web应用和移动应用中,为了方便管理和访问,开发者经常需要将用户的头像、产品图片、证书等图像数据存储在数据库中。这一过程涉及到图像的编码、解码以及...

    VB保存rtf文件到数据库中

    要将RTF文件内容保存到数据库,首先需要一个能存储RTF数据的字段,通常为`LONGTEXT`或`BLOB`类型。创建SQL插入语句,例如: ```vb Dim sql As String sql = "INSERT INTO MyTable (RTFColumn) VALUES (?)" ``` ...

    将文件上传、下载(以二进制流保存到数据库)实现代码

    然后将这个二进制流保存到数据库中,通常是保存到一个BLOB(二进制大对象)类型的字段中。 2. 文件下载:当用户需要下载文件时,后端从数据库中读取对应文件的二进制流,然后将其转换成文件格式,并通过Web服务器...

    将多媒体文件保存到数据库中,或将数据库中的多媒体文件显示出来(90KB)...

    `frmMain.frm`很可能是一个用户界面文件,它包含了与用户交互的控件,如按钮和文本框,用于选择本地文件并上传到数据库,或者下载数据库中的文件。`mediadb.VBP`和`mediadb.vbw`是Visual Basic for Applications...

    多媒体文件保存到数据库中

    "多媒体文件保存到数据库中"这一主题涉及到如何有效地存储、管理和检索非结构化数据,如图像、音频、视频等。以下是对这个主题的详细阐述: 1. **数据库选择**:首先,选择合适的数据库系统至关重要。对于多媒体...

    vb.net 使用Access数据库保存和读取图片文件

    在VB.NET中,Access数据库常被用于小型项目的数据存储,包括保存和读取不同类型的数据,如文本、数字,甚至图片。本教程将详细介绍如何利用VB.NET与Access数据库交互,实现图片文件的保存与读取,并将结果展示在...

    PB-数据库保存图片并在Datawindow中显示

    标题 "PB-数据库保存图片并在Datawindow中显示" 涉及到的是使用PowerBuilder(PB)这个开发工具,将图片数据存储在数据库中,并在DataWindow控件中进行显示的技术。下面,我们将深入探讨这一主题。 1. **Power...

Global site tag (gtag.js) - Google Analytics