使用 RoR 将参数从表单传递到控制器
Passing parameters from form to controller using RoR
我是 RoR 开发的新手,对如何将参数从 HTML 视图传递到控制器有些困惑。我在网上看到了一些使用私有方法的例子:
private
def message_params
params.require(:message).permit(:content)
end
我一直在网上寻找有关此方法的作用和工作原理的说明,但我只遇到 posts/articles 使用该方法而不是解释其作用的人。
我希望有人能解释该方法如何通过 POST 请求获取(/过滤器?)通过表单传递的值,require 和 permit 关键字的含义以及我如何更改此方法以适应我自己用。
例如,如果我需要获取有关一本新书的数据,我会这样做:
private
def book_params
params.require(:book_name).require(:ISBN).require(:Author).permit(:Illustrator)
end
考虑到我的图书对象具有这些字段,以上是否有效?
如有任何说明,我们将不胜感激。
谢谢。
这种功能用于将参数列入白名单 - 即假设您有一个消息模型,并且通过控制器操作您应该只能更改内容。也许还有一个作者字段 - 但即使有人通过表单传递它,你也不想更新它。
params.require(:message)
会return给你params[:message]。 permit 表示您只允许内容字段通过。
参见:http://edgeguides.rubyonrails.org/action_controller_overview.html#strong-parameters
我需要查看您的模型设置,但我假设给定一个书本模型,您会想要更类似于以下内容的内容:
params.require(:book).permit(:illustrator, :author, :isbn)
这里有一些信息(我正在使用您的示例模型 Book 和 BookController),可能可以帮助您更好地理解
当你提交表单时,rails自动调用create方法,在create方法里面你会看到Book.new(book_params),book_params会调用private方法并且会检查允许哪个字段,如果有另一个字段已提交但未在您的许可块中列出,则不会将其传递给保存命令
class BooksController < ApplicationController
def create
@book = Book.new(book_params)
if @book.save
flash[:success] = 'Data save successfully'
redirect_to books_path
else
render :new
end
end
private
def book_params
params.require(:book).permit(
:book_name,
:isbn,
:author,
:illustrator)
end
end
我是 RoR 开发的新手,对如何将参数从 HTML 视图传递到控制器有些困惑。我在网上看到了一些使用私有方法的例子:
private
def message_params
params.require(:message).permit(:content)
end
我一直在网上寻找有关此方法的作用和工作原理的说明,但我只遇到 posts/articles 使用该方法而不是解释其作用的人。
我希望有人能解释该方法如何通过 POST 请求获取(/过滤器?)通过表单传递的值,require 和 permit 关键字的含义以及我如何更改此方法以适应我自己用。
例如,如果我需要获取有关一本新书的数据,我会这样做:
private
def book_params
params.require(:book_name).require(:ISBN).require(:Author).permit(:Illustrator)
end
考虑到我的图书对象具有这些字段,以上是否有效?
如有任何说明,我们将不胜感激。
谢谢。
这种功能用于将参数列入白名单 - 即假设您有一个消息模型,并且通过控制器操作您应该只能更改内容。也许还有一个作者字段 - 但即使有人通过表单传递它,你也不想更新它。
params.require(:message)
会return给你params[:message]。 permit 表示您只允许内容字段通过。
参见:http://edgeguides.rubyonrails.org/action_controller_overview.html#strong-parameters
我需要查看您的模型设置,但我假设给定一个书本模型,您会想要更类似于以下内容的内容:
params.require(:book).permit(:illustrator, :author, :isbn)
这里有一些信息(我正在使用您的示例模型 Book 和 BookController),可能可以帮助您更好地理解
当你提交表单时,rails自动调用create方法,在create方法里面你会看到Book.new(book_params),book_params会调用private方法并且会检查允许哪个字段,如果有另一个字段已提交但未在您的许可块中列出,则不会将其传递给保存命令
class BooksController < ApplicationController
def create
@book = Book.new(book_params)
if @book.save
flash[:success] = 'Data save successfully'
redirect_to books_path
else
render :new
end
end
private
def book_params
params.require(:book).permit(
:book_name,
:isbn,
:author,
:illustrator)
end
end