【发布时间】:2015-02-26 02:17:05
【问题描述】:
注意:这个问题已经回答(由我),下面的信息原来是一个红鲱鱼。我把它留在这里以防它对某人有帮助。答案见下文!
我正在将我的所有控制器升级为强参数,但我遇到了 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
【问题讨论】:
标签: api timezone nested-attributes strong-parameters timecop