- 浏览: 521758 次
- 性别:
- 来自: 无锡
文章分类
最新评论
-
鬼一天:
代码有问题,没有考虑负数的情况。
根据经纬度和半径计算经纬度范围 -
Tair:
...
通过反射把map中的属性赋值到实体类bean对象中 -
springmvc_springjpa:
spring mvc demo教程源代码下载,地址:http: ...
Spring3.0 MVC的初次尝试 -
酷的飞上天空:
haiyinlong 写道private File value ...
使用HttpUrlConnection进行post请求上传文件 -
lliiqiang:
分析很难,好的规则持久,靠某个方法条件局限不能证明长久
ruby的基本类型
对Rails的一个简单的练习
一个学生和教师的CRUD,以及简单的ajax应用。学生和教师为多对一得关系
model为:
class Student < ActiveRecord::Base belongs_to :teacher end class Teacher < ActiveRecord::Base has_many :students,:dependent=>:delete_all end
migrate为:
class CreateTeachers < ActiveRecord::Migration def self.up create_table :teachers,:force=>true do |t| t.column :name,:string end end def self.down drop_table :teachers end end class CreateStudents < ActiveRecord::Migration def self.up create_table :students,:force=>true do |t| t.column :name,:string t.column :teacher_id,:integer add_index :students,:teacher_id end end def self.down drop_table :students end end
执行rake db:migrate 后,可以看到没有在数据库中使用外键,只是在teachar_id上面增加了索引
控制器代码: 功能为列出所有的学生和教师,增加和删除学生与教师
#coding:utf-8 class HomeController < ApplicationController #默认页面 def index list render :action => "index" end # 如果提交的姓名不为空,则增加学生,然后跳转到index def new # 如果姓名不为空则执行保存操作 if check_n entity = Student.new unless params[:teacher_id].nil? unless params[:teacher_id]=="0" entity.teacher = Teacher.find params[:teacher_id] end end if check_type == "teacher" entity = Teacher.new end entity.name = @name entity.save flash[:error] = "OK" end redirect_to :action => "index" end # 删除学生/老师 def delete begin # 根据类型进行判断,执行对应代码 logger.debug "debug=================================" logger.debug "the type and id is type:#{params[:type]},id:#{params[:id]}" if params[:type] and params[:type]=="student" Student.destroy(params[:id]) else t = Teacher.find params[:id] # 取得级联删除的学生的id id_array = t.student_ids.to_s t.destroy logger.debug "debug=================================" logger.debug "the array is #{id_array.to_s}" end rescue =>e logger.debug(e) #如果删除失败则不返回任何信息 # render :text => e.to_s return end # 如果是删除老师则返回一个包含有级联删除的学生id的数组字符串 if id_array.nil? render :text => "OK" else render :text => id_array end end private # 列出所有的学生和老师 def list @students = Student.find :all @teachers = Teacher.find :all @teacher_name = [] for st in @students th = st.teacher unless th.nil? @teacher_name << st.teacher.name else @teacher_name << "none" end # logger.debug "debug=================================" # logger.debug "the student's teacher is #{st.teacher}" end end # 检测提交的姓名是否为空 def check_n @name = params[:name] logger.debug "debug=================================" logger.debug "this name is #{@name}" if @name.nil? or @name.strip.empty? flash[:error] = "name should not be empty." return false else return true end end #判断要保存的是学生还老师 def check_type type = params[:type] logger.debug "debug=================================" logger.debug "the type is #{type}" if type.nil? raise "未知的类型。" elsif type == "student" return type elsif type == "teacher" return type else raise "未知的类型" end end end
index.rhtml如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <base href="/"/> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>test</title> <script type="text/javascript" src="javascripts/prototype.js"></script> <script type="text/javascript"> function addEvent(){ //为每个a标签注册单击事件 $$("a").each(function(a){ a.observe("click",deleteEntity) }) } //给教师列表注册时间晕 function teacherList(){ select = document.getElementById("type") value = select.options[select.selectedIndex].text if (value=="学生") $('teacher_id').show() else{ $("teacher_id").hide() } } // 取得数据的id和类型然后调用Ajax请求 function deleteEntity(e){ a = Event.element(e) //取得a标签的id内容,此为要删除的数据在数据库中的主键id id = a.identify() type = "student" if(a.hasClassName("teacher")){ type="teacher" } //向后台发送删除请求晕 ajax(a,id,type) } function ajax(a,id,type){ // alert(id) new Ajax.Request("home/delete",{parameters:{id:id,type:type},onSuccess:callback}) function callback(data){ //取得服务器返回的处理结果 var result = data.responseText removeLi(a) //如果返回的不是OK,则刷新学生列表晕 if (result!="OK") refreshList(result) } } function refreshList(array){ ids = eval(array) if(ids.length==0) return $$("ul")[0].childElements().each(function(li){ li.childElements().each(function(a){ id = a.identify() for(i=0;i<ids.length;i++){ if (id == ids[i]) removeLi(a) } }) }) } function removeLi(a){ a.ancestors()[0].remove() } // 添加事件 Event.observe(window,"load",addEvent) </script> </head> <body> <p>所有学生:</p> <ul> <% @students.each_index do |index| %> <li> 学生姓名:<%=@students[index].name%> 所属的教师:<%=@teacher_name[index]%> <a href="javascript:void(0);" class="student" id="<%=@students[index].id%>">删除</a> </li> <%end%> </ul> <p>所有教师:</p> <ul> <% @teachers.each do |teacher| %> <li> 教师姓名:<%=teacher.name%> <a href="javascript:void(0);" class="teacher" id="<%=teacher.id%>">删除</a> </li> <%end%> </ul> <p /> <hr /> <p>增加学生/教师<br /></p> <% form_tag("home/new") do-%> 姓名:<input name="name"/> <p /> 类别: <select onchange="teacherList()" name="type" id="type"> <option value="student">学生</option> <option value="teacher">教师</option> </select> <div id="teacher_id"> 所属的教师: <select name="teacher_id"> <option value="0">暂无</option> <% @teachers.each do |teacher| %> <option value="<%=teacher.id%>"><%=teacher.name%></option> <%end%> </select> </div> <p /> <input type="submit" value="确定"/> <%end-%> <p>处理结果:<span style="color: red"><%=flash[:error]%></span></p> </body> </html>
上面的
//给教师列表注册时间晕
//向后台发送删除请求晕
最后的'晕'如果不加上,就会出现这个错误 invalid byte sequence in GBK。很诡异啊,可能是bug吧。看了下rubyAPI文档,发现添加Encoding.default_internal="UTF-8"和Encoding.default_external="UTF-8"到application_controller.rb中就可以解决这个诡异的问题。
还有个问题:如果表单输入中文,即数据库中存入中文时还是会报 incompatible character encodings: GBK and ASCII-8BIT的错误
ruby为ruby1.9.1版本
rails为rails2.3.8版本
发表评论
-
Oauth简易服务器端ruby实现,仿新浪微博验证的方式
2011-04-25 11:39 3884前段时间用ruby实现了新浪微博的简易Oauth的客户端,对a ... -
rails部署ree+nginx+passenger
2011-04-16 22:09 1805开始尝试过rvm,但因为 ... -
Rails 多表关联查询指定字段的方法
2011-03-04 15:25 5617Rails中都是返回的单个模型的对象,怎么返回多个表中的指定字 ... -
新浪微博oauth简易客户端ruby实现
2010-12-29 11:07 4172前后花了近一个星期,中间就sha1的加密就纠结了几天。。。 ... -
使用monit工具对thin进程的监控
2010-08-27 11:07 2497monit可以对服务器进程进行监控,如果发现服务器进程挂掉,则 ... -
最近服务器总是出现504错误,又想不到是什么原因造成的,郁闷!!
2010-08-22 13:33 6601服务器在机房,为了能方便查看日志,就配置了一个路径可以直 ... -
ActiveRecord学习之多数据库访问和事务控制
2010-07-03 16:37 2937多数据库的访问 目的:在同一个应用中访问不同数据库,以 ... -
ActiveRecord学习(二)
2010-06-20 16:15 1427单表继承 官方文档:ht ... -
Rails部分辅助方法
2010-06-14 18:43 7663AssetTagHelper 官方链接:http://ap ... -
Rails命名约定
2010-06-14 15:41 1583模型命名规则 数据库表名:hello_texts, ... -
ActiveRecord学习
2010-06-13 14:21 17600ActiveRecord是Rails进行数据库操作的核心组件。 ... -
Rails学习之路由设置(URI映射)
2010-06-12 15:34 3519URL的映射规则,在config/routes.rb文件中。这 ... -
Rails学习之控制器
2010-06-12 13:46 5533控制器简单介绍 一个简单的控制器中的例子 class Si ... -
Rails简单文件上传
2010-06-10 20:03 1816RMagick和ruby-debug-ide还是没有安装成功, ... -
Rails的中文乱码问题
2010-06-09 14:19 8963乱码情况一:netbeas控制 ... -
StatementInvalid: Mysql::Error: query: not connected解决方法
2010-06-07 16:21 2874今天学习rails,在使用scoffold建立一张表的CRUD ...
相关推荐
- 测试安装: 创建一个简单的Rails应用来验证是否成功安装。 #### 五、练习作业0-Hello World - **目标**: - 学习如何创建第一个Rails应用程序。 - **过程**: - 创建新项目。 - 设置数据库配置。 - 创建控制器...
此外,Rails还支持ActiveRecord,一个强大的ORM(对象关系映射)库,使得数据库操作变得简单易懂。 本书内容可能涵盖以下关键知识点: 1. **Ruby基础知识**:首先,你需要了解Ruby的基础语法,包括变量、数据类型...
PDF文档通常包含详细的教程、实例代码和可能的练习题,旨在帮助学习者全面了解和掌握Ruby on Rails的核心概念和技术。 在Rails框架中,关键知识点包括: 1. **Ruby基础知识**:首先,理解Ruby语言的基本语法和特性...
为学习 Ruby on Rails 构建的简单 cms。 想看看吗? 使用详细信息superadmin@pho.sx / password 随意进行更改。 ##里面有什么? 页面管理和帖子管理,为 Markdown 编辑和实时预览提供出色的支持。 由 ajaxy 提供支持...
- **先练习编写简单的测试**:从编写简单的单元测试开始,逐渐过渡到更复杂的测试类型。 - **清楚自己在做什么**:在编写测试时,始终保持对测试目的的清晰认识,确保测试能够真正验证目标功能。 - **先探索实现方式...
6. **ActiveRecord**:Rails的ORM(对象关系映射)组件,它使得数据库操作变得简单,通过ActiveRecord模型可以直接操作数据库记录。 7. **控制器与动作**:控制器处理HTTP请求,定义了一系列的动作(actions),每...
我完全从SCRATCH构建了一个简单的Rails版本。 在此过程中,我: 彻底调查机架 了解Ruby元编程在Rails中的工作方式 创建我自己的路由系统 了解Rails如何自动加载控制器 从头开始创建控制器/视图/模型 了解有关请求/...
文件“应用Rails进行敏捷Web开发第三版20090319.doc”可能包含了该书的详细章节内容、示例代码或练习题解答。通过阅读这份文档,读者可以学习到如何创建Rails项目,设置数据库,编写控制器和视图,以及使用Rails的...
这是一个实验性游戏,可练习Ruby on Rails + Hotwire + Turbo的组合。 转到查看它正在运行。 邀请朋友一起玩。 游戏 两名玩家在五轮中回答简单的数学方程式,每轮有四个备选方案。 游戏仅接受第一个答案。 如果答案...
自述 此自述文件通常会记录启动和运行应用程序所需的任何步骤。 您可能想要涵盖的内容: Ruby版系统依赖配置数据库创建数据库初始化如何运行测试套件服务(作业队列、缓存服务器、搜索引擎等) 部署说明… 如果您不...
在"hello_rails-master"这个项目中,我们可以预见到这是一个简单的Rails应用教程。"hello_rails"通常是Rails新手的第一个示例项目,它演示了如何创建一个基本的“Hello, World!”应用程序。项目可能包含以下文件和...
这是我的第一个非教程引导 Rails 应用程序! 这是一个简单的待办事项列表,仅用于学习目的,但它仍然非常具有挑战性。 你可以玩它。 我没有包含用户登录/身份验证的内容,因为我希望这是一个为期一周的项目,而且...
冰淇淋卡车在铁轨上通过Ice Cream Truck的实现,对Ruby on Rails API模式进行超级简单的探索。 卡车提供物品的初始库存和价格(请参阅 )和两个端点: GET /api/v1/foods列出卡车的当前库存以及单位和收入的总销售额...
例如,一个简单的无参数方法定义如下: ```ruby def say_hello puts "Hello!" end ``` 调用这个方法只需写`say_hello`。Ruby还支持块(block),一种特殊的代码结构,常用于迭代或回调,可以通过`do..end`或者`{....
"ironhack:在 Ironhack 上用作练习的一组 Rails 项目"标题表明了这些项目是专为教学而设计的,旨在帮助学生掌握Rails开发的核心技能。 Ruby是一种面向对象的、动态类型的编程语言,它以其简洁、易读的语法和强大的...
学习资源: 围栏RailsCasts 格randint的世界-Ruby Coder 样品 simple_blog 一个简单而基本的博客示例,请遵循ruby on rails官方入门指南。 my_api 通过Rails 5仅本机API模式练习API专用应用程序。 ...
此外,为了提高用户体验,我们还可以设计一个简单的命令行界面,让用户能够方便地输入火车数量和出站序列,程序实时反馈结果。这不仅能够帮助用户理解队列数据结构的工作原理,还能让他们在实践中学习编程和逻辑思考...
通过这个`BookSystem-MVC`的小练习,你可以学习如何构建一个简单的图书管理系统,理解并实践`MVC`模式的基本原理。这将有助于你在未来处理更复杂的Web应用时,能够更好地组织代码结构,提高开发效率。同时,这样的...
7. **Database Integration**:Rails使用ActiveRecord来处理数据库操作,这使得数据库交互变得简单。数据库迁移(migrations)用于修改数据库结构,`schema.rb`文件记录了数据库的当前状态。 8. **Authentication &...