在Rails 4中进行一些计算后,有没有办法生成URL或新路由?
为了更清楚,请查看此图片:
点击"计算"它显示了一些结果,但路线仍然相同(localhost:8080/en
)。我想生成另一条路线,让我们说(localhost:8080/en/outputs/de32r3ff3
),当我发送这条路线或链接到另一个人时,他只需将此URL放在他的浏览器中即可看到结果。
想象一下localhost:8080
是mydomain.com
。
我查了this但我不清楚。
知道该怎么做吗?
答案 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进行查找,以实现