注意:我正在使用Rails 3.2
我正在尝试按照以下示例代码实现simple_form:https://github.com/rafaelfranca/simple_form-bootstrap/blob/master/app/controllers/articles_controller.rb。我有一个摘要模型而不是文章模型。
除了两个私有方法之外,我理解大部分内容。我尝试基本上复制除了两个私有方法之外的代码,它的作用是创建一个新的Summary,但属性都是nil。
1)如何保存属性? .new
和.save
之间的区别是什么?
2)创建动作有哪些内容?当你到达创建动作时,你刚刚填写了一个表格,所以必须有一些东西可用,但我不知道它是什么,或者它是如何可用的。
3)before_action
和两种私有方法发生了什么?
Summaries Controller
class SummariesController < ApplicationController
before_filter :set_summary, only: [:show, :edit, :update, :destroy]
def index
@summaries = Summary.all
end
def show
end
def new
@summary = Summary.new
end
def edit
end
def create
@summary = Summary.new(params[:summary])
if @summary.save
redirect_to @summary, notice: 'Summary created.'
else
render :new
end
end
def update
if @summary.update(params[:summary])
redirect_to @summary, notice: 'Summary updated.'
else
render :edit
end
end
def destroy
@summary.destroy
redirect_to summaries_url, notice: 'Summary destroyed'
end
private
# sets @summary to make available for show, edit, update
# and destroy actions so code isn't repetitive
def set_summary
@summary = Summary.find(params[:id])
end
# Only allow a trusted parameter "white list" through.
# def summary_params
# params[:summary].permit!
#end
end
答案 0 :(得分:1)
回答你的问题:
1)new
是一个Ruby方法,用于初始化对象的新实例。因此,当您致电Article.new
时,您会获得Article
类的新实例。
save
是一种用于将记录保存到数据库的Rails方法。如果您的对象实例使用new
进行实例化,则会调用create
。如果您通过查找程序(find
,all
,where
等)加载了对象,那么它会调用update
而不是create
2)所有操作(以及视图中)都有一个名为params
的哈希。对于create
操作,params[:article]
,这是表单发布的数据。在create
的顶部,尝试拨打raise params[:article].to_yaml
以查看其中发生的情况。
哎呀,甚至试试raise params.to_yaml
来看看那里有什么。
3)对before_action
的调用会在set_article
,show
,edit
和update
操作之前运行destroy
私有方法。如果没有这个,您需要在每个操作中手动调用@article = Article.find(params[:id])
。所以这消除了相当多的重复!
您会注意到create
操作的第一行调用了article_params
方法。这是在Rails中实现所谓的强参数的常用方法。强参数是Rails 4中的新参数,但可以通过strong_parameters
gem添加到早期版本的Rails中。