Rails控制器:您如何考虑可选和必需的参数?

时间:2017-07-21 12:51:37

标签: ruby-on-rails

在我看到的教程中,create已经实现如下:

def create
  @note = Note.new(note_params)

  @note.save
  redirect_to @note
end

private
  def note_params
    params.require(:note).permit(:title, :type, :description, :dueDate)
  end

我已经阅读了有关可选参数的fetch方法,但是如何将这两种方法混合起来需要一些参数并允许其他参数呢?会是这样的:

private
  def note_params
    params.require(:note).permit(:title, :type)
    params.fetch(:note, {}).permit(:description, :dueDate)
  end

在这种情况下,我可以期望传递0,1或2个获取的参数吗?

1 个答案:

答案 0 :(得分:1)

我认为你读错了。在这一行

 params.require(:note).permit(:title, :type, :description, :dueDate)

所需参数为:note:title:type和其他人只是被允许/允许出现在:note下。这种语法都不是必需。如果您确实需要:title,那么最好通过Note模型上的状态验证来处理。

class Note
  validates_presence_of :title
end

现在,如果您没有通过params[:note][:title]@note.save将返回false,您可以使用用户友好的错误呈现表单(突出显示缺少的字段等)。如果note_params方法在缺少的标题属性上引发异常,您将无法(如此容易)执行此操作。这就是你在rails中处理所需记录属性的方法。