ruby on rails 入门注意事项

简介: <div class="markdown_views"><h2 id="ruby-on-rails-入门注意事项">ruby on rails 入门注意事项</h2><p>首先声明:本文不是ruby on rails的入门教程 <br>入门教程可以参考: <br><a href="http://www.tutorialspoint.com/ruby-on-rails/r

ruby on rails 入门注意事项

首先声明:本文不是ruby on rails的入门教程
入门教程可以参考:
http://www.tutorialspoint.com/ruby-on-rails/rails-controllers.htm
http://guides.rubyonrails.org/active_record_basics.html
http://guides.rubyonrails.org/getting_started.html#saving-data-in-the-controller
本文仅列举入门过程中容易犯的错误
ruby版本:
ruby -v
ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin15]
rails版本:
rails -v
Rails 4.2.6
gem -v
2.5.1
rake –version
rake, version 11.1.2

(1)配置文件冒号后面缺少空格

注意:冒号后面需要空格
冒号后面需要空格

(2)获取表单参数

以为

params[article]

可以获取表单提交的参数
article前面要加上冒号
正确:

params[:article]

(3)持久化表单参数

最开始以为:

# 增加,持久化到数据库
  def create
    articles = Article.create(params[:article])
    render plain: params[:article].inspect
  end

结果报错:
ActiveModel::ForbiddenAttributesError
正确的:

# 增加,持久化到数据库
  def create
    articles = Article.create(params.require(:article).permit(:title, :text))
    render plain: params[:article].inspect
  end

范例:

def create
   @book = Book.new(book_params)

   if @book.save
      redirect_to :action => 'list'
   else
      @subjects = Subject.all
      render :action => 'new'
   end

end

def book_params
   params.require(:books).permit(:title, :price, :subject_id, :description)
end

(4)传递数据到view

以为这样就可以把model传递到view:

# 条件查询
  def show
    id=params[:id]
article=Article.find_by(id: id)

  end

article前面应该加上at符号
正确的:

 # 条件查询
  def show
    id=params[:id]
    @article=Article.find_by(id: id)
    end

添加记录的表单(app/views/articles/new.html.erb):

<h1>New Article</h1>
<div>
  <%= form_for :article, url: articles_path do |f| %>
      <p>
        <%= f.label :title %><br>
        <%= f.text_field :title %>
      </p>

      <p>
        <%= f.label :text %><br>
        <%= f.text_area :text %>
      </p>

      <p>
        <%= f.submit %>
      </p>
  <% end %>

</div>

注意:等号后面需要空格

查询结果的显示页面(app/views/articles/show.html.erb):

<div>查询结果:</div>
<div>
  <ul>
    <li>
      <label for="">title:</label>
      <label for=""> <%= @article.title %> </label>
    </li>
    <li>
      <label for="">text:</label>
      <label for=""> <%= @article.text %> </label>
    </li>
  </ul>
</div>

(5)启动服务

powder link
或者:

./bin/rails server(端口默认是:3000)
停止服务:powder unlink

(6)执行migrate

功能:创建数据表

rake db:migrate

rake db:migrate VERSION=20080906120000

(7)更新记录(保存更新)

我的写法:

def update

    articles = Article.update(params[:id], params.require(:article).permit(:title, :text))
    redirect_to :action => 'list'
  end

最佳实践:

def update
    @article = Article.find(params[:id])
    @article.update(params.require(:article).permit(:title, :text))

    redirect_to :action => 'list'
  end

先通过id查询记录,然后再更新,而不是直接更新

(8)手动指定视图

render template: "articles/show"

类似于springMVC中的:
spring MVC
等价于:

render :show

下面几种写法达到的效果是完全相同的:

render :edit
render action: :edit
render "edit"
render "edit.html.erb"
render action: "edit"
render action: "edit.html.erb"
render "books/edit"
render "books/edit.html.erb"
render template: "books/edit"
render template: "books/edit.html.erb"
render "/path/to/rails/app/views/books/edit"
render "/path/to/rails/app/views/books/edit.html.erb"
render file: "/path/to/rails/app/views/books/edit"
render file: "/path/to/rails/app/views/books/edit.html.erb"

(9)浏览器跳转

使用redirect_to

# 增加,持久化到数据库
  def create
    articles = Article.create(params.require(:article).permit(:title, :text))
    # render plain: params[:article].inspect
    redirect_to :action => 'list'
  end

类似于spring MVC中的
response.sendRedirect
这里写图片描述

(10)rubyonrails中好像没有Java Web中的forward跳转

知道在rails中forward跳转的同学麻烦告诉我下

(11)CRUD

增:

Article.create(params.require(:article).permit(:title, :text))

删除:

id=params[:id]
    Article.find(id).destroy;

改:

@book = Book.find(params[:id])
@book.update(book_params)


条件查询

@article=Article.find_by(id: id)

查询所有

@articles=Article.all

(12)指定请求方式

使用method

<%= form_for :article, method: "PUT", url: {action: "update"} do |f| %>

(13)构造表单时推荐使用form_for

we used form_for tag for the form action. It will perform better than form_tag. Why because it will create interaction with the Model easily. Therefore it is better to use form_for tag whenever you need interaction between the model and the form fields.
翻译:
我们使用form_for实现表单提交.它比form_tag 更强大.为什么呢?
因为form_for 可以更方便地与Modeal进行交互(数据绑定).
因此,无论什么时候,你需要在model和表单之间进行数据传递时推荐使用form_for.

参考:
http://www.tutorialspoint.com/ruby-on-rails/rails-controllers.htm
http://guides.rubyonrails.org/layouts_and_rendering.html
http://www.tutorialspoint.com/ruby-on-rails/rails-views.htm
http://hw1287789687.iteye.com/blog/2288230

http://hw1287789687.iteye.com/blog/2288267

相关文章
|
4月前
|
缓存 关系型数据库 数据库
上云一年烧320万美元,成功“下云”六个月后Ruby on Rails之父现身回了 14 个问题!...
上云一年烧320万美元,成功“下云”六个月后Ruby on Rails之父现身回了 14 个问题!...
25 1
|
5月前
|
SQL 前端开发 数据库
前端学 Ruby:熟悉Rails
前端学 Ruby:熟悉Rails
166 0
|
5月前
|
前端开发 Linux 数据库
前端学 Ruby:安装Ruby、Rails
前端学 Ruby:安装Ruby、Rails
75 0
|
7月前
|
Java Linux 应用服务中间件
在 Ruby on Rails 应用程序中重用 Java 代码
在 Ruby on Rails 应用程序中重用 Java 代码
|
9月前
|
存储 前端开发 关系型数据库
Ruby on Rails 快速入门2
Ruby on Rails 快速入门2
126 0
|
9月前
|
移动开发 前端开发 关系型数据库
Ruby on Rails 快速入门1
Ruby on Rails 快速入门1
82 0
|
机器学习/深度学习 开发框架 Java
别梦依稀咒逝川,Ruby二十八年前|M1芯片Mac os系统配置Ruby(3.0.0) on Rails(6.1.1)开发环境
在每个开发者心里,都会有一门“最好”的语言,在这个世界的某个深处,在一些矫矫不群的人们心中,这门语言的名字叫做Ruby,它今年二十八岁了,历史和Java一样的悠久,但是它没有大厂背书、它的性能被开发者诟病、时至今日依然无法高效利用多核资源,甚至于它每年都要被“死亡”一次,相比于有太阳计算机系统、甲骨文、IBM 这些大公司支持的 Java,它是那么的一无所有,但是,它又拥有全世界最虔诚的“信徒”,拥有最活跃的开发者社区,这一切,又让它是那么的应有尽有。是的,这就是Rubyist的理念:有的时候,你想证明给一万个人看,到后来,你发现只得到了一个明白的人,那就够了。
别梦依稀咒逝川,Ruby二十八年前|M1芯片Mac os系统配置Ruby(3.0.0) on Rails(6.1.1)开发环境
|
JavaScript 前端开发 Java
基于Docker在Win10平台搭建Ruby on Rails 6.0框架开发环境
2023年,“非著名Web框架”--Ruby on Rails已经18岁了。在今年,Rails 6.0趋于完善,除了拿掉讨厌的Jquery,Webpacker 也成为默认前端打包方案,Sprockets 开始软着陆,未来很可能会和Jquery一样被彻底废弃,这就是历史的进程。
基于Docker在Win10平台搭建Ruby on Rails 6.0框架开发环境
|
开发框架 安全 Ruby
CVE-2018-3760 Ruby On Rails 路径穿越漏洞
CVE-2018-3760 Ruby On Rails 路径穿越漏洞
167 0
CVE-2018-3760 Ruby On Rails 路径穿越漏洞
|
安全 Ruby
CVE-2019-5418 Ruby on Rails 路径穿越与任意文件读取漏洞
CVE-2019-5418 Ruby on Rails 路径穿越与任意文件读取漏洞
181 0
CVE-2019-5418 Ruby on Rails 路径穿越与任意文件读取漏洞