在我的rails 7应用程序中,我有一个支付列表,其中的数据来自外部API,而不是存储在数据库中,如下所示:
# payments_controller.rb
def index
@payments = client.payments(user_id: current_user.payment_platform_id)
end
我将其显示在视图中:
# payments/index.html.erb
<table>
<tbody>
<% @payments.each do |payment| %>
<tr>
<td><%= payment.id %></td>
<td><%= payment.amount %></td>
</tr>
<% end %>
</tbody>
</table>
现在我想添加link_to
,它会将用户重定向到该特定支付的显示操作-简单地说,到payments#show
。此外,将payment
传递给参数,以便在控制器show action中作为params[:payment]
可用。如下所示:
# payments_controller.rb
def show
@payment = params[:payment]
end
# payments/index.html.erb
<tbody>
<% @payments.each do |payment| %>
<tr>
other stuff (...)
<td>
<%= link_to 'Details', payment_path(payment.id } %>
</td>
</tr>
<% end %>
</tbody>
# routes.rb
resources :payments, only: %i[index show]
使用此代码将我重定向到一个空的索引页。如何使这个link_to在不将付款存储在数据库中的情况下工作?
1条答案
按热度按时间i1icjdpr1#
缺省情况下,在Rails中URL的动态段是
:id
,但在show
方法中使用@payment = params[:payment]
您可以通过两种方式进行修复:
试着抓住
params[:id]
或者另一种方法:将动态段名称更改为
:payment
在这种情况下,
params[:payment]
将可用