I'm currently doing this
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
Is it possible too chain strong parameters in Rails? I tried doing this but it didn't work
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
To DRY things up I have used the tap method and done something like this...
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
To just have different sets of parameters, this works...
def detail_params(is_create = false)
permitted = [:note]
permitted << :user_id if is_create
params.require(:detail).permit(permitted)
end