Ruby on rails 改进这段代码。工作正常,但看起来可疑
我希望任何人都能帮助改进这段代码。它目前有效,但在我看来总是可疑的Ruby on rails 改进这段代码。工作正常,但看起来可疑,ruby-on-rails,ruby,Ruby On Rails,Ruby,我希望任何人都能帮助改进这段代码。它目前有效,但在我看来总是可疑的 def sms @message = Message.new decoded_to = CGI.unescape(params[:to]) #@message.to = decoded_to.gsub(/[^\d]/,"") @message.to = CGI.unescape(params[:to]).strip.gsub("+","").gsub(/\s+/, "") @message
def sms
@message = Message.new
decoded_to = CGI.unescape(params[:to])
#@message.to = decoded_to.gsub(/[^\d]/,"")
@message.to = CGI.unescape(params[:to]).strip.gsub("+","").gsub(/\s+/, "")
@message.from = CGI.unescape(params[:from])
@message.message = CGI.unescape(params[:message]).strip
@message.user_id = current_user.id
@message.status = 'Queued'
if @message.save
MessageWorker.perform_async(@message.id, [""], current_user.id)
render json: {status: "Success"}
else
render json: {status: "Failed" }
end
end
这是一个与另一个控制器使用的共享消息模型交互的API控制器。它严格用于API交互。分离参数清理逻辑:
def sms
@message = Message.new(clean_params.merge(user: current_user, status: 'Queued'))
if @message.save
MessageWorker.perform_async(@message.id, [""], current_user.id)
render json: {status: "Success"}
else
render json: {status: "Failed" }
end
end
private
def clean_params
cleaned_params = {}
%i(to from message).each { |key| cleaned_params[key] = CGI.unescape(params[key]) }
cleaned_params[:to].strip!.gsub!("+","").gsub!(/\s+/, "")
cleaned_params[:message].strip!
cleaned_params
end
未经测试,我希望没有输入错误;) 在这里,你需要编写测试来消除心中的不确定性和焦虑。而且,仅仅发布这样的代码也不会有什么帮助。解释请求类型、完成了什么过程以及期望得到什么响应。将所有这些垃圾移到
消息的实例化上。类似这样的事情:在将所有参数传递给Message#newt之前,我最好使用一种FormObject来处理所有参数。这个问题更适合修改参数。哈希不是一个好主意。看到这个@AndreyKryachkov-对,我更新了代码。