我是 RoR 的初學者。只是像網上商店一樣創建smth,我需要以另一種貨幣換算價格。為此我有服務類
@product_decorator = Product.includes(:category).map{|product| ProductDecorator.new(product)}
我也有實際課程的資料庫表
create_table :product_wrappers do |t|
t.decimal :euro
t.decimal :rubles
end
考慮到如果我以歐元/盧布手動更改產品的價格方法效果很好,但我需要在 link_to 方法中使用新引數(如 eur/rub)進行更改,我堅持認為我需要在 store_controller 中創建方法
路線
put '/set_currency', to: 'store#set_currency'
看法
<%= link_to "USD", set_currency_path(:currency => :usd), class: "btn btn-outline-secondary" %>
<%= link_to "RUB", set_currency_path(:currency => :rub) ,class: "btn btn-outline-secondary" %>
<%= link_to "EUR", set_currency_path(:currency => :eur), class: "btn btn-outline-secondary" %>
uj5u.com熱心網友回復:
就像想法一樣
要使用貨幣作為查詢引數構建 URL,請使用此類幫助程式
<%= link_to "My product", product_path(product, currency: :eur) %>
它將生成這樣的 HTML
<a href="/products/1?currency=eur">My product</a>
在您的控制器中,可能ApplicationController
before_action :set_current_currency
def set_current_currency
@current_currency = params[:currency] || 'eur'
end
并在這樣的視圖中顯示所選貨幣的價格
product.public_send(@current_currency)
在會話中保存所選貨幣或使用用戶組態檔也可能是個好主意
def set_current_currency
currency =
if params[:currency]
params[:currency]
elsif session[:currency]
session[:currency]
elsif current_user
current_user.preferred_currency
end
session[:currency] =
if currencies.include?(currency)
currency
else
default_currency
end
end
而不是session[:currency]在您的視圖中使用而不是@current_currency
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/505035.html
