ruby-on-rails - 是否可以在 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
推荐阅读
- c# - ASP.NET Core 使用之前上传的文件预填充 IFormFile
- linux - 来自远程 mongo 服务器的 Mongodump
- python-3.x - 如何将数据类型与python中的变量进行比较?
- java - 在 Java 中排除特定文件名的正则表达式
- c - 如何禁用进程的权限?
- flutter - Flutter/Dart - 为什么我的 Future 返回 Null?
- excel - 在 Excel VBA 中使用 WorksheetFunction.Trim 正在删除单元格中的颜色
- sql - 按转置的 SQL 组
- node.js - 使用公共 wifi 发出 npm install
- javascript - 导入和破坏 es6 语法之间的关系?