rails 中的params[:id] 是从哪里来的?
Where does params[:id] come from in rails?
我是 Rails 的初学者。我现在正在 rails 学习 'Beginning Rails 4' 这本书。我想问你有关 'parameter' 传递给 params 方法的问题。以下是典型的rails控制器之一。
class CommentsController < ApplicationController
before_action :load_article
def create
@comment = @article.comments.new(comment_params)
if @comment.save
redirect_to @article, notice: 'Thanks for your comment'
else
redirect_to @article, alert: 'Unable to add comment'
end
end
def destroy
@comment = @article.comments.find(params[:id])
@comment.destroy
redirect_to @article, notice: 'Comment Deleted'
end
private
def load_article
@article = Article.find(params[:article_id])
end
def comment_params
params.require(:comment).permit(:name, :email, :body)
end
end
是的,这只是一个典型的评论控制器,用于创建附加到文章的评论。评论模型 'belongs to' 文章模型和文章模型 'has many' 评论。
看看销毁方法。
def destroy
@comment = @article.comments.find(params[:id])
-- snip --
end
通过find(params[:id])找到与文章关联的评论。我的问题是,params[:id] 到底从哪里来的?
它来自URL吗?或者 rails 是否会在创建任何评论记录时自动保存参数散列?所以我们可以通过 find(params[:id]) 找到任何评论?
load_article方法类似
def load_article
@article = Article.find(params[:article_id])
end
它通过 params[:article_id] 找到了一篇文章。这个params[:article_id]从哪里来的? rails如何通过这个找到文章?
params[:id]
确实来自 URL。当你在路由文件中使用 resources
时,Rails 会自动为你生成标准的 REST 路由。在您的 destroy
示例中,这通常是使用 DELETE
HTTP 方法对 /comments/:id
的请求,其中将 :id
添加到 params
散列,即 params[:id]
.
params[:id]
是在您的 Rails 应用程序中唯一标识 (RESTful) 资源的字符串。它位于资源名称后的 URL 中。
例如,对于名为 my_model
的资源,GET
请求应对应于 URL,例如 myserver.com/my_model/12345
,其中 12345
是 params[:id]
标识 my_model
的特定实例。其他 HTTP 请求(PUT、DELETE 等)及其对应的 RESTful 类比。
如果您仍然对这些概念和术语感到困惑,您应该阅读 Rails routing 及其对 RESTful 体系结构的解释。
我是 Rails 的初学者。我现在正在 rails 学习 'Beginning Rails 4' 这本书。我想问你有关 'parameter' 传递给 params 方法的问题。以下是典型的rails控制器之一。
class CommentsController < ApplicationController
before_action :load_article
def create
@comment = @article.comments.new(comment_params)
if @comment.save
redirect_to @article, notice: 'Thanks for your comment'
else
redirect_to @article, alert: 'Unable to add comment'
end
end
def destroy
@comment = @article.comments.find(params[:id])
@comment.destroy
redirect_to @article, notice: 'Comment Deleted'
end
private
def load_article
@article = Article.find(params[:article_id])
end
def comment_params
params.require(:comment).permit(:name, :email, :body)
end
end
是的,这只是一个典型的评论控制器,用于创建附加到文章的评论。评论模型 'belongs to' 文章模型和文章模型 'has many' 评论。
看看销毁方法。
def destroy
@comment = @article.comments.find(params[:id])
-- snip --
end
通过find(params[:id])找到与文章关联的评论。我的问题是,params[:id] 到底从哪里来的?
它来自URL吗?或者 rails 是否会在创建任何评论记录时自动保存参数散列?所以我们可以通过 find(params[:id]) 找到任何评论?
load_article方法类似
def load_article
@article = Article.find(params[:article_id])
end
它通过 params[:article_id] 找到了一篇文章。这个params[:article_id]从哪里来的? rails如何通过这个找到文章?
params[:id]
确实来自 URL。当你在路由文件中使用 resources
时,Rails 会自动为你生成标准的 REST 路由。在您的 destroy
示例中,这通常是使用 DELETE
HTTP 方法对 /comments/:id
的请求,其中将 :id
添加到 params
散列,即 params[:id]
.
params[:id]
是在您的 Rails 应用程序中唯一标识 (RESTful) 资源的字符串。它位于资源名称后的 URL 中。
例如,对于名为 my_model
的资源,GET
请求应对应于 URL,例如 myserver.com/my_model/12345
,其中 12345
是 params[:id]
标识 my_model
的特定实例。其他 HTTP 请求(PUT、DELETE 等)及其对应的 RESTful 类比。
如果您仍然对这些概念和术语感到困惑,您应该阅读 Rails routing 及其对 RESTful 体系结构的解释。