繁体   English   中英

使用RoR将参数从表单传递到控制器

[英]Passing parameters from form to controller using RoR

我是RoR开发的新手,并对如何将参数从HTML视图传递到控制器感到困惑。 我在网上看到了一些使用私有方法的示例,例如:

private
def message_params
  params.require(:message).permit(:content)
end

我一直在网上寻找有关此方法的作用及其工作方式的说明,但是我只遇到使用该方法的帖子/文章,而没有解释它的作用。

我希望有人能解释该方法如何通过POST请求获取通过表单传递的(/ filters?)值,require和allow关键字的含义以及如何更改此方法以适合自己的用法。

例如,如果我需要获取有关新书的数据,我会这样做:

private
    def book_params
      params.require(:book_name).require(:ISBN).require(:Author).permit(:Illustrator)
    end

鉴于我的书对象具有这些字段,以上内容是否有效?

任何澄清将不胜感激。

谢谢。

这种功能用于将参数列入白名单-即说您有一个消息模型,并且通过控制器操作,您只能更改内容。 也许还有一个author字段-但是即使有人将其通过表单传递,您也不想更新它。

params.require(:message)

将返回给您params [:message]。 允许表示您只允许内容字段通过。

请参阅: 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM