注意:这个问题已经(由我)回答,下面的信息被证明是一个红鲱鱼。我把它留在这里以防它对某人有帮助。下面就来看看答案吧!
我正在将我的所有控制器都升级为强参数,并且我遇到了 API 控制器的问题,我必须在其中做一些时髦的时区工作。
强参数是deal_strong_params
,问题似乎在于将它们作为该deal_params
行中的第二个参数。我已经尝试了很多东西,比如玩弄那个ActionController::Parameters.new()
东西,但还没有做到。与强参数的情况一样,我得到 400 个错误而不是我的预期响应。我已经尝试了很多东西,我真的很欢迎你的建议。
来自 API 控制器的相关代码:
before_filter :validate_update_params, :only => [:update]
.
. [show method left out]
.
def update
deal = SuperDeal.find_by_id(params[:id])
return head :not_found unless deal
deal_params = convert_time_to_local(deal, deal_strong_params)
respond_to do |format|
format.json {
if deal.update_attributes(deal_params)
render :text => "Successful update", :status => :created
else
render :text => "Unsuccessful update: # {deal.errors.full_messages.join(", ")}", :status => :expectation_failed
end
}
end
end
强大的参数:
def deal_strong_params
params.require(:deal).permit(:offer_starts_at,:offer_ends_at,:copy_complete,:short_title, { :deal_status_attributes => [:id, :ops_complete_at] })
end
以及适用于 TimeCop 的特殊时间公式。我包括它,因为我需要它:
def convert_time_to_local(deal, deal_params)
# times are coming in as UTC
[:offer_starts_at, :offer_ends_at].each do |attribute|
next unless deal_params[attribute]
deal_params[attribute] = deal.timezone.parse("#{deal_params[attribute]} UTC")
end
deal_params
end