【问题标题】:Is it possible to chain strong parameters in a Rails controller是否可以在 Rails 控制器中链接强参数
【发布时间】:2020-08-26 00:51:18
【问题描述】:

我目前正在这样做

class DetailsController < ApplicationController
  def create
    @detail = Detail.new(params.require(:detail).permit(:user_id, :note))
    if @detail.save
      redirect_to @detail
    else
      render 'new'
    end
  end
  
  def update
    @detail = Detail.find(params[:id])
    if @detail.update(detail_params)
      redirect_to @detail
    else
      render 'edit'
    end
  end
  
  private
  def detail_params
    params.require(:detail).permit(:note)
  end  
end

是否可能在 Rails 中链接过强的参数?我试过这样做,但没有成功

class DetailsController < ApplicationController
  def create
    @detail = Detail.new(detail_params.permit(:user_id))
    if @detail.save
      redirect_to @detail
    else
      render 'new'
    end
  end
  
  def update
    @detail = Detail.find(params[:id])
    if @detail.update(detail_params)
      redirect_to @detail
    else
      render 'edit'
    end
  end
  
  private
  def detail_params
    params.require(:detail).permit(:note)
  end  
end

【问题讨论】:

  • 你想完成什么?添加user_id只是为了创建?
  • 是的 :) 完全正确。

标签: ruby-on-rails strong-parameters


【解决方案1】:

为了干燥,我使用了 tap 方法并做了类似的事情......

 def detail_params(is_create = false)
   params.require(:detail).permit(:note).tap do |p|
     p[:user_id] = current_user.id if is_create
   end
 end 

  def create
    @detail = Detail.new(detail_params(true))
    if @detail.save
      redirect_to @detail
    else
      render 'new'
    end
  end


  def update
    @detail = Detail.find(params[:id])
    if @detail.update(detail_params)
      redirect_to @detail
    else
      render 'edit'
    end
  end

只要有不同的参数集,这行得通...

 def detail_params(is_create = false)
   permitted = [:note]
   permitted << :user_id if is_create
   params.require(:detail).permit(permitted)
 end 

【讨论】:

  • 是否可以只插入user_id 作为创建操作中允许的参数之一(而不是将其值设置为 current_user)?
  • @vince,当然。甚至不需要水龙头。添加示例以回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-23
  • 1970-01-01
  • 2019-01-21
  • 1970-01-01
相关资源
最近更新 更多