rails中的form_for

1 form_for方法是ActionView::Helpers::FormHelper模块内的方法,所以可以在ActionView的实例中直接调用

2 from_for方法的原型为form_for(record, options = {}, &block),其中record可以是字符串和符号,这时,参数通过params[string/:symbol][:field]传递;record也可以是示例对象,这时参数通过params[instance.class.lowercase][:field]传递,hash中的key与实例的类型名有关,而与instance本身的变量名字无关。

3 当record在routes.rb中定义为resources时,可以不定义url参数,默认情况下,rails会根据record是否为新创建实例来自动安排url,

<%= form_for @post do |f| %>
  ...
<% end %>生成<%= form_for @post, as: :post, url: post_path(@post), method: :patch, html: { class: "edit_post", id: "edit_post_45" } do |f| %>

<%= form_for(Post.new) do |f| %>
  ...
<% end %>生成<%= form_for @post, as: :post, url: posts_path, html: { class: "new_post", id: "new_post" } do |f| %>
  ...
<% end %>
时间: 2024-10-12 16:05:54

rails中的form_for的相关文章

rails中一个窗体多个模型——fields_for

借助field_for可以生成表单来处理两个或更多模型对象的数据 先看一个官方的例子,一个表单中有person和permission两个模型,其中每个person包含一个permission <%= form_for(@person) do |person_form| %> First name: <%= person_form.text_field :first_name %> Last name: <%= person_form.text_field :last_name

RailsCast26 Hackers Love Mass Assignment rails中按params创建、更新model时存在的安全隐患

Mass assignment是rails中常用的将表单数据存储起来的一种方式.不幸的是,它的简洁性成了黑客攻击的目标.下面将解释为什么及如何解决. 上述表单为一个简单的注册表单.当用户填入name,点击提交时,一个新用户被创建.用户模型被如下定义: ruby create_table :users do |t| t.string :name t.boolean :admin, :default => false, :null => false end 当用户点击提交时,如下的action被执

Rails中如何避免N+1问题

N+1问题 N+1问题是数据库访问中最常见的一个性能问题,首先介绍一下什么是N+1问题: 举个例子,我们数据库中有两张表,一个是Customers,一个是Orders.Orders中含有一个外键customer_id,指向了Customers的主键id. 想要得到所有Customer以及其分别对应的Order,一种写法是 SELECT * FROM Customers; 对于每一个Customer: SELECT * FROM Orders WHERE Orders.customer_id =

理解ruby on rails中的ActiveRecord::Relation

ActiveRecord::Relation是rails3中添加的.rails2中的finders, named_scope, with_scope 等用法,在rails3统一为一种Relation用法. 以下是返回ActiveRecord::Relation的方法: bind create_with distinct eager_load extending from group having includes joins limit lock none offset order preloa

rails 中加载自定义文件

rails默认生成lib文件夹,但是没有默认加载lib中的文件,可以在config/application.rb中配置如下代码,加载lib文件夹里面定义的module或者是class: config.autoload_paths += %W(#{config.root}/lib) 当然这种方法不只是可以加载lib文件,还可以加载其他自定义的文件夹. 注意的是这些自定义的文件的module或者class名一定要和文件名一直,比如class名为AppStore,那文件名一定要是app_store.r

rails中params[:id]与params["id"]分析

写这个帖子的缘由是因为在页面参数传到rails的controller时用params[:]和params[""]都可以取到值: ? 1 2 3 4 5 6 [1] pry(#<BooksController>)> params => {"action"=>"show", "controller"=>"books", "id"=>"382

rails中accepts_nested_attributes_for应用

Model: class Blog < ActiveRecord::Base has_many :strip_rules accepts_nested_attributes_for :strip_rules, allow_destroy: true end class StripRule < ActiveRecord::Base belongs_to :blog attr_accessible :rule, :blog_id end 要实现在新建和修改blog时可以添加/删除任意多个strip

rails 中model之间的 association (:inverse_of)

class Customer < ActiveRecord::Base has_many :orders end class Order < ActiveRecord::Base belongs_to :customer end 如上代码两个model在做如下查询的时候: c = Customer.first o = c.orders.first c.first_name == o.customer.first_name # true c.first_name = "other na

【转】Rails中Bootstrap的安装和使用

转自:http://blog.csdn.net/lissdy/article/details/9195651 眼看着前端攻城师们都开始使用Bootstrap创作网页,于是也想学着在最近正在学习的Rails中使用Bootstrap. 具体安装使用过程如下: 1.创建Rails工程 rails new usedschool   2.生成脚手架 rails g scaffold Item title:string description:text --skip-stylesheets 3.应用迁移 r