ruby-on-rails 通过表单减少/增加轨道中的成员变量

kyvafyod  于 2023-05-08  发布在  Ruby
关注(0)|答案(1)|浏览(81)

我有两个类ABB属于AA有许多B,资源配置为:

resources :as do
    resources :bs
  end

B有一个成员变量amount,我希望能够使用表单从前端减少和增加,在这种情况下,它不能是编辑表单。
我能做这个吗?我可以做的地方,形式打开在一个弹出窗口后,以下链接?
我想象的increase函数是这样的:

def increase()
   @b = b.find(params[:id])
   @b.amount = @b.amount + params[:amount]
   @.update
end

我就是想不明白该怎么做。

lh80um4z

lh80um4z1#

您可以创建自定义管线。在Rails指南中有许多不同的非资源路径可以查看。
其中一种方法是:

  • 使用put,因为这是更新请求
  • 使用on: :member捕获路由上的基站params[:id]
# routes.rb

resources :as do
  resources :bs do
    put 'increase_amount', on: :member
    put 'decrease_amount', on: :member
  end
end
# bs controller

def increase_amount()
   @b = B.find(params[:id])
   amount = @b.amount + params[:amount]
   if @b.update(amount: amount)
     ...
   else
     ...
   end
end

def decrease_amount()
   @b = B.find(params[:id])
   amount = @b.amount - params[:amount]
   if @b.update(amount: amount)
     ...
   else
     ...
   end
end
# haven't verified this is the correct route name, confirm using rake routes
<%= form_tag(increase_amount_a_bs_path(@a, @b), method: :put) do %>
  <%= label_tag(:amount, "Increase Amount:") %>
  <%= number_field_tag(:amount) %>
  <%= submit_tag("Update Amount") %>
<% end %>

<%= form_tag(decrease_amount_a_bs_path(@a, @b), method: :put) do %>
  <%= label_tag(:amount, "Decrease Amount:") %>
  <%= number_field_tag(:amount) %>
  <%= submit_tag("Update Amount") %>
<% end %>

至于弹出窗口,我不确定你的技术栈中有什么前端库,但Bootstrap是一个选项,模态

相关问题