【发布时间】:2017-01-02 14:09:59
【问题描述】:
假设我的墙展示动作中列出了一堆卡片。当您与卡片交互时(例如单击它),我想更新该卡片的属性。
我目前正在通过使用 Javascript 获取卡片的属性、将它们添加到卡片表单并远程提交表单来做到这一点。
我有卡的 ID,但我如何告诉表单我要更新哪张卡?
表单和控制器更新操作应该是什么样的?
这是我目前所拥有的
表格
<%= form_for(@card, remote: true) do |f| %>
<%= f.text_field :list_id %>
<%= f.text_field :order %>
<% end %>
控制器
def update
@card = Card.find(params[:id])
if @card.update_attributes(shared_params)
redirect_to edit_card_path(@card, format: :html)
else
render :edit
end
end
【问题讨论】:
-
您可能在表单中有一个隐藏字段,并通过 javascript 填充该字段并点击卡片 ID,然后提交表单。
-
但是如果我只是将 ID 放在表单域中,Rails 现在如何更新哪张卡?
-
从
@card = Card.find(params[:id])上面的代码可以理解,params[:id] 将是另一张卡片的 id,无论您点击了什么,因为您没有传递它。我的建议是像hidden_field_tag :card_id一样传递它,用卡片 ID 填充此字段(可能来自 onclick 事件)并通过 JS 提交表单。 form_for @card 可能持有不同的 ID,但您必须使用从隐藏字段传递的 ID -
干杯小伙子!少数人
-
form_for(@card, remote: true, method: :patch)
标签: ruby-on-rails ruby-on-rails-5