如何在Rails 4中进行计算后生成路由

时间:2015-10-02 07:11:06

标签: ruby-on-rails

在Rails 4中进行一些计算后,有没有办法生成URL或新路由?

为了更清楚,请查看此图片:

enter image description here

点击"计算"它显示了一些结果,但路线仍然相同(localhost:8080/en)。我想生成另一条路线,让我们说(localhost:8080/en/outputs/de32r3ff3),当我发送这条路线或链接到另一个人时,他只需将此URL放在他的浏览器中即可看到结果。

想象一下localhost:8080mydomain.com

我查了this但我不清楚。

知道该怎么做吗?

2 个答案:

答案 0 :(得分:0)

首先,您需要创建输出控制器,并在那里创建show动作。

当您在mydomain.com并看到空白表单时,您需要使用JS获取表单值,并在按钮单击时使用这些参数重定向到output#show

例如:

# get params from form and store to params variable in your JS
# let's say you params equal 'kWp=4000&kWh=30'
var encodedParams = btoa('kWp=4000&kWh=30') # a1dwPTQwMDAma1doPTMw
window.location.href = '/output/?' + encodedParams

然后你会在后端点击输出#show action:

def show
  params_string = Base64.decode64(params[:id]) # kWp=4000&kWh=30
  # transform string to hash of params
  params_hash = params_string
                  .split('&')
                  .map {|s| s.split('=')}
                  .inject({}) {|carry, (k, v)| carry[k] = v; carry}
  # now render you form again using params from params_hash
end

您可以尝试不同的编码来接收更短的网址。

因此,这样您就可以避免将值保存到DB,并从已解码的参数计算您的表单。

修改

PS:在本例中,使用了从ruby代码

中可以看到的Base64编码

答案 1 :(得分:0)

操作

  

在Rails 4中进行一些计算后?

我认为你必须从不同的角度来看待它;您并未尝试更改路线,而是将用户发送到特定操作。

您提到localhost:8080/en/outputs/de32r3ff3作为您希望向用户发送的路线 - 您要调用的控制器/操作是什么?

-

答案就在这里:

  

他只需将此网址放入浏览器即可查看结果

因此,您需要为计算创建一个新记录,然后可以随时通过该特定URL访问该记录。

这是Rails中的标准CRUD行为:

<强> CRUD

#config/routes.rb
namespace :en do
   root to: "calculations#new"
   resources :calculations, path: :outputs, only: [:new, :create, :show] #-> url.com/en/outputs/:id
end

#app/controllers/calculations_controller.rb
class CalculationsController < ApplicationController
   before_action :get_calculation, only: :show

   def new
      @calculation = Calculation.new
   end

   def create
      @calculation = Calculation.new calculation_params
      ## user agent stuff you can append as follows:
      #@calculation.user_agent = request.user_agent
   end

   def show
   end

   private

   def get_calculation
      @calculation = Calculation.find params[:id]
   end

   def calculation_params
       params.require(:calculation).permit(:x, :y, :z)
   end
end

这将使您能够保存模型中的计算:

#app/models/calculation.rb
class Calculation < ActiveRecord::Base
end

-

这样,您就可以访问new的{​​{1}}视图作为&#34; root&#34;您的calculations命名空间:

en

-

最后,您将获得一个允许您访问的设置:

#app/views/calculations/new.html.erb
<%= form_for @calculation do |f| %>
   ## your fields here
   <%= f.submit %>
<% end %>

您希望使用UUID's in Rails以及FriendlyID进行查找,以实现