为强参数声明值

declare value for strong parameters

当我必须为我的许可证中的一个参数和 post 形式的值声明值时,我遇到了问题。 看看我的代码:

class QuoteController < ApplicationController
  autocomplete :author, :name, :full => true
  autocomplete :Category, :title, :full => true

  def new
    @quotes = Quote.new
  end

  def create
    @quotes = Quote.new(quotesParams)
      if @quotes.save
        redirect_to root_url
      else
        redirect_to root_url
      end
  end

    private
    def quotesParams
      params.require(:quote).permit(:text,:author_id, :category_id, 
                                   {:send_type => ["web"]}, 
                                   {:user_id => [current_user.id])
    end
end

但是当我尝试保存在数据库中时 send_type 并且 user_id 为空

强参数更多的是关于参数的结构而不是实际的参数值。比如:

{ :send_type => ["web"] }
{ :user_id => [current_user.id] }

不分配默认值,它们在 params 中指定嵌套值的结构。

我认为您应该在两个地方处理默认值:

  1. send_type 应默认为模型内部的 'web'
  2. user_id 模型应该需要,但控制器应该设置默认值(因为那是知道 current_user.

你的控制器中有这样的东西:

def create
  @quotes = Quote.new(quotesParams) { |q| q.user_id = current_user.id }
  #...
end

def quotesParams
  params.require(:quote).permit(:text, :author_id, :category_id, :send_type)
end

如果控制器不提供值,您的模型可以将 send_type 默认为 'web'

为您的控制器尝试以下代码:

class QuoteController < ApplicationController
  autocomplete :author, :name, :full => true
  autocomplete :Category, :title, :full => true

  def new
    @quotes = Quote.new
  end

  def create
    @quotes = Quote.new(quotesParams)
    @quotes.send_type = "web"
    @quotes.user_id = current_user.id

    if @quotes.save
      redirect_to root_url
    else
      redirect_to root_url
    end
  end

  private
  def quotesParams
    params.require(:quote).permit(:text, :author_id, :category_id)
  end
end