`
kenrome
  • 浏览: 40908 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

rails中scaffold自动生成的CRUD,我怎样修改渲染的表单

阅读更多

目标:做一个博客系统,有两张表,分类(post_categories)和文章(posts).想保持rails的scaffold,尽量减少代码编写,来完成CRUD功能。

1。数据库表:

\db\migrate\002_create_post_categories.rb
create_table :post_categories do |t|
       t.column :name, :string, :null =>false

\db\migrate\002_create_post.rb
create_table :posts do |t|
       t.column :category_id,   :integer, :null =>false
       t.column :title, :string
       t.column :doc,   :text
       t.column :addTime,   :datetime, :default =>'0000-00-00 00:00:00'
       t.column :isOpen, :boolean, :default =>true
       t.column :acount,   :int, :default =>1
     end
     execute "alter table posts add constraint fk_post_category   foreign key (category_id)
     references post_categories(id)"

2.用generate生成Models和Controllers

3.用generate生成views:

generate:scaffold
model name: post
controller name:post
actions:post

默认情况下,我们看到:\app\views\post\new.rhtml
<% form_tag :action => 'create' do %>
   <%= render :partial => 'form' %>
   <%= submit_tag "Create" %>
<% end %>

但因为posts外键连接了表post_categories,而以上的表单没有指定category_id字段,所以操作是不成功的。现在做以下修改:
\app\controllers\post_controller.rb
def new
     @post = Post.new
     @post_categories=PostCategory.find(:all)
   end
即在原来默认的基础上,增加了@post_categories=PostCategory.find(:all)
然后修改页面:\app\views\post\new.rhtml
<% form_tag :action => 'create' do %>
   <%= render :partial => 'form' %>
<select name="post[category_id]">
           <% @post_categories.each do |c| %>
             <option value="<%=c.id%>"><%=c.name%></option>
           <% end %>
   </select>
   <%= submit_tag "Create" %>
<% end %>

这样,程序运行成功,可以添加文章了。
不过问题又来了,因为posts表单是默认渲染的,在添加文章的时候显示了标示文章浏览次数的字段acount.而这个字段是不要求用户输入的,我们需要在添加文章的时候隐藏这个字段,怎么办?

怎么办。。。

分享到:
评论
2 楼 kenrome 2007-10-26  
找到了,修改views的_form.rhtml
1 楼 9esuLuciano 2007-10-24  
kenrome 写道
<p><strong>目标:做一个博客系统,有两张表,分类(post_categories)和文章(posts).想保持rails的scaffold,尽量减少代码编写,来完成CRUD功能。</strong></p>
<p><strong>1。数据库表:</strong></p>
<p><font color="#993300"><font color="#000000">\db\migrate\002_create_post_categories.rb</font><br />
create_table :<strong>post_categories</strong> do |t|<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.column :name, :string, :null =&gt;false</font></p>
<p><font color="#993300"><font color="#000000">\db\migrate\002_create_post.rb</font><br />
create_table :<strong>posts</strong> do |t|<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.column :category_id,&nbsp;&nbsp; :integer, :null =&gt;false<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.column :title, :string<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.column :doc,&nbsp;&nbsp; :text<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.column :addTime,&nbsp;&nbsp; :datetime, :default =&gt;'0000-00-00 00:00:00'<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.column :isOpen, :boolean, :default =&gt;true<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; t.column :acount,&nbsp;&nbsp; :int, :default =&gt;1<br />
&nbsp;&nbsp;&nbsp;&nbsp; end<br />
&nbsp;&nbsp;&nbsp;&nbsp; execute &quot;alter table posts add constraint fk_post_category&nbsp;&nbsp; foreign key (category_id) <br />
&nbsp;&nbsp;&nbsp;&nbsp; references post_categories(id)&quot;</font></p>
<p><strong>2.用generate生成Models和Controllers</strong></p>
<p><strong>3.用generate生成views:</strong></p>
<p>generate:scaffold<br />
model name: post<br />
controller name:post<br />
actions:post</p>
<p>默认情况下,我们看到:\app\views\post\new.rhtml<br />
<font color="#993300">&lt;% form_tag :action =&gt; 'create' do %&gt;<br />
&nbsp;&nbsp; &lt;%= render :partial =&gt; 'form' %&gt;<br />
&nbsp;&nbsp; &lt;%= submit_tag &quot;Create&quot; %&gt;<br />
&lt;% end %&gt;</font></p>
<p>但因为posts外键连接了表post_categories,而以上的表单没有指定category_id字段,所以操作是不成功的。现在做以下修改:<br />
\app\controllers\post_controller.rb<br />
<font color="#993300" size="2">def new<br />
&nbsp;&nbsp;&nbsp;&nbsp; @post = Post.new<br />
&nbsp;&nbsp;&nbsp;&nbsp; @post_categories=PostCategory.find(:all)<br />
&nbsp;&nbsp; end</font><br />
即在原来默认的基础上,增加了@post_categories=PostCategory.find(:all)<br />
然后修改页面:\app\views\post\new.rhtml<br />
<font color="#993300">&lt;% form_tag :action =&gt; 'create' do %&gt;<br />
&nbsp;&nbsp; &lt;%= render :partial =&gt; 'form' %&gt;<br />
&lt;select name=&quot;post[category_id]&quot;&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;% @post_categories.each do |c| %&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;option value=&quot;&lt;%=c.id%&gt;&quot;&gt;&lt;%=c.name%&gt;&lt;/option&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;% end %&gt;<br />
&nbsp;&nbsp; &lt;/select&gt;<br />
&nbsp;&nbsp; &lt;%= submit_tag &quot;Create&quot; %&gt;<br />
&lt;% end %&gt;</font></p>
<p>这样,程序运行成功,可以添加文章了。<br />
不过问题又来了,因为posts表单是默认渲染的,在添加文章的时候显示了标示文章浏览次数的字段acount.而这个字段是不要求用户输入的,我们需要在添加文章的时候隐藏这个字段,怎么办?</p>
<p>怎么办。。。<br />
</p>
从视图里面把相关的ruby代码和html删掉

相关推荐

    [Rails 常用插件简介]CRUD Generator 2

    CRUD Generator 2就是这样一个工具,它是一个基于Edge Rails(Rails的开发版本)的高级生成器,旨在简化模型和控制器的CRUD操作的创建。 **1. Edge Rails与Rails稳定版的区别** Edge Rails指的是Rails的最新开发...

    model自动生成对应crud sql语句

    标题中的“model自动生成对应crud sql语句”指的是在软件开发过程中,利用特定的工具或框架,通过定义数据模型(Model)自动生成功能齐全的CRUD(Create, Read, Update, Delete)SQL语句的技术。这种方法可以显著...

    Ruby-GoOnRails使用Rails生成器来生成一个Golang应用

    在Rails中,可以修改`config/application.rb`或`config/environments/development.rb`等文件来设置相关选项。 ### 7. 使用`go_on_rails`生成其他Go组件 除了生成整个Go应用,`GoOnRails`还可以生成模型、控制器等...

    用Ext Scaffold插件打造Rails的Ext风格

    Rails的Scaffold机制是自动化工具,能够自动生成常见的CRUD(创建、读取、更新、删除)操作的代码,帮助开发者快速搭建基本的后台接口。然而,这个描述提到的“Ext Scaffold”插件,是在Rails的默认scaffold基础上...

    基于Rails2.2.2的自建的CRUD项目视频

    在这个项目中,我们将探讨如何使用Ruby on Rails 2.2.2版本构建一个基础的CRUD(创建、读取、更新和删除)应用。Ruby on Rails 是一个流行的开源Web应用程序框架,它遵循模型-视图-控制器(MVC)架构模式,使得开发...

    rails-scaffold-react:Rails 的 React 脚手架应用程序

    在 Rails 中,`scaffold` 是一个命令行工具,用于自动生成用于CRUD(创建、读取、更新、删除)操作的基础控制器、模型、视图和路由代码。通过结合 React,我们可以创建更动态和交互式的用户界面,同时利用 Rails ...

    自动化生成支持cucumber,Rspec的Rails(持续更新中)

    标题 "自动化生成支持cucumber,Rspec的Rails(持续更新中)" 暗示了这个压缩包文件的内容可能涉及使用Cucumber和RSpec这两种自动化测试工具在Ruby on Rails框架下的集成和配置。Cucumber是一种行为驱动开发(BDD)的...

    Rails3常用命令行命令

    Rails的scaffold命令是一个强大的工具,可以快速生成一套完整的CRUD(Create, Read, Update, Delete)界面,包括Model、View和Controller。例如,创建一个名为Person的资源: ```bash rails g scaffold person name...

    在rails中 使用RSpec生产CHM文档

    标题 "在Rails中使用RSpec生产CHM文档" 暗示了这个话题是关于如何在Ruby on Rails(简称Rails)框架中使用RSpec测试工具来创建帮助文档,特别是以CHM(Microsoft Compiled HTML Help)格式。CHM文件是一种常见的...

    Ruby on Rails入门例子

    - **生成器(Generators)**:Rails提供了强大的生成器工具,可以自动生成模型、控制器、迁移文件等,例如`rails generate model Post title:string content:text`。 - **数据库迁移(Database Migrations)**:...

    Rails101_by_rails4.0

    作者特别提到了“CRUD懶人大法Scaffold”,它是一种通过Rails自动生成代码的方式来快速搭建基本的CRUD操作,这大大简化了开发流程,使得开发者可以将更多的精力放在业务逻辑的实现上。 此外,书中还介绍了一些Rails...

    rails4_crud_with_angularjs:Rails4 + AngularJS 嵌套表单

    在这个应用程序中,我给出了如何使用 Rails4 和 AngularJS 创建 CRUD 操作的示例。 使用 AngularJS 创建嵌套表单 当我们需要在 rails 中创建嵌套表单时,我们使用了nested_form gem。 但是如果你使用 AngularJS ...

    rails-1.0.0

    8. **脚手架**:Rails的scaffold命令可以自动生成基本的CRUD(创建、读取、更新、删除)功能,方便快速搭建原型。 9. **测试支持**:Rails内置了测试框架,如Test::Unit和RSpec,提供模型、控制器和功能测试的支持...

    rails指南 中文版

    6. **Scaffolding**:Rails提供了快速生成基本CRUD(Create, Read, Update, Delete)操作的命令行工具,可以自动生成控制器、视图、样式表和测试文件,方便快速搭建原型。 7. **Testing**:Rails强调测试驱动开发,...

    Ruby-SimpleForm轻松处理Rails表单

    在Ruby on Rails框架中,构建表单是一项常见的任务,而Simple Form gem就是为了简化这一过程而设计的。Simple Form是一款强大的表单构建器,它提供了一种简洁、直观的方式来创建复杂的表单,使得开发者能更专注于...

    graphql-rails-generators:Graphql Rails Scaffold:trade_mark:。 从Rails模型自动生成GraphQL类型

    一些生成器可以轻松将Rails模型与集成。 我之所以创建它,是因为我浪费了太多的按键来手动复制模型架构以创建graphql类型。 该项目包含用于查看ActiveRecord模型架构的生成器,并为您生成graphql类型。 gql:model...

    rails有用的命令

    - `rails generate scaffold Product title:string description:text image_url:string`:自动生成包括模型、控制器、视图和迁移文件的CRUD(创建、读取、更新、删除)功能。 10. **验证器**: - `validates ...

Global site tag (gtag.js) - Google Analytics