是否可以在Rails控制器中链接强参数

问题描述

我目前正在这样做

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

解决方法

要弄干事情,我使用了 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 

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...