params [:id]如何在Rails中创建动作?

时间:2014-05-18 15:24:51

标签: ruby-on-rails

我正在学习Rails并且正在编写经典博客应用程序。

def update
  @article = Article.find(params[:id])
  @article.update(article_params)
  flash.notice = "Article '#{@article.title}' updated!"
  redirect_to article_path(@article)
end

params[:id]方法如何使用update?我的form_for只是传递了@article对象:

def edit
  @article = Article.find(params[:id])
end

http://guides.rubyonrails.org/form_helpers.html#binding-a-form-to-an-object开始,表单将POST到的网址为/articles/create。它似乎没有查询字符串,因此id似乎不会通过GET发送。根据我的理解,params[:articles]是通过POST传递的全部内容。那么params[:id]行动的update怎么可用?

3 个答案:

答案 0 :(得分:1)

updatePUT,构建的网址是/articles/1

createPOST,构建的网址是/articles

这就是文档中的内容。

现在,您可以在id中看到update参数的来源,是的,create没有ID:)

答案 1 :(得分:0)

@article = Article.find(params[:id])

返回的文章实例包括文章的ID和数据库中的所有字段。

然后(我猜你有形式)解析实例并显示模型中的所有字段。

然后当你按下提交时,它会将散列中的所有更改传递给更新方法(浏览器中的PUT方法)。

希望回答你的问题。

答案 2 :(得分:0)

通过rails路由器进行更新。阅读this。如果你查看你的应用程序的config / routes.rb,你会发现这样的东西:

resources :articles

如果您在应用程序中运行rake路由任务,它将返回类似于:

的内容
     articles GET    /articles(.:format)               articles#index
              POST   /articles(.:format)               articles#create
  new_article GET    /articles/new(.:format)           articles#new
 edit_article GET    /articles/:id/edit(.:format)      articles#edit
      article GET    /articles/:id(.:format)           articles#show
              PATCH  /articles/:id(.:format)           articles#update
              PUT    /articles/:id(.:format)           articles#update
              DELETE /articles/:id(.:format)           articles#destroy

所以这是RESTful资源映射HTTP动词的方式。因此,当您创建文章时,没有:id,因为显然您将从DB自动增量计数器获取它。当您更新它时,您已经拥有id并将您的请求路由到带有HTTP PUT请求的/ articles /:id。并且:id存在可在控制器操作中使用的查询参数。