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-对,我更新了代码。