Rails 7 link_显示在没有数据库连接的情况下的操作

dsf9zpds  于 2022-09-21  发布在  Ruby
关注(0)|答案(1)|浏览(139)

在我的rails 7应用程序中,我有一个支付列表,其中的数据来自外部API,而不是存储在数据库中,如下所示:

  1. # payments_controller.rb
  2. def index
  3. @payments = client.payments(user_id: current_user.payment_platform_id)
  4. end

我将其显示在视图中:

  1. # payments/index.html.erb
  2. <table>
  3. <tbody>
  4. <% @payments.each do |payment| %>
  5. <tr>
  6. <td><%= payment.id %></td>
  7. <td><%= payment.amount %></td>
  8. </tr>
  9. <% end %>
  10. </tbody>
  11. </table>

现在我想添加link_to,它会将用户重定向到该特定支付的显示操作-简单地说,到payments#show。此外,将payment传递给参数,以便在控制器show action中作为params[:payment]可用。如下所示:

  1. # payments_controller.rb
  2. def show
  3. @payment = params[:payment]
  4. end
  5. # payments/index.html.erb
  6. <tbody>
  7. <% @payments.each do |payment| %>
  8. <tr>
  9. other stuff (...)
  10. <td>
  11. <%= link_to 'Details', payment_path(payment.id } %>
  12. </td>
  13. </tr>
  14. <% end %>
  15. </tbody>
  16. # routes.rb
  17. resources :payments, only: %i[index show]

使用此代码将我重定向到一个空的索引页。如何使这个link_to在不将付款存储在数据库中的情况下工作?

i1icjdpr

i1icjdpr1#

缺省情况下,在Rails中URL的动态段是:id,但在show方法中使用@payment = params[:payment]

您可以通过两种方式进行修复:

试着抓住params[:id]

  1. def show
  2. @payment = params[:id]
  3. end

或者另一种方法:将动态段名称更改为:payment

  1. resources :payments, only: %i[index show], param: :payment

在这种情况下,params[:payment]将可用

相关问题