【问题标题】:Update Attributes of a Specific Record更新特定记录的属性
【发布时间】: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


【解决方案1】:

您也可以使用相同的新模板进行编辑。此处唯一的要求是您要编辑的对象。

所以,首先让你在控制器中准备好编辑动作

def edit
  @card = Card.find(params[:id])
end

编辑/new.html.erb

<%= form_for(@card, remote: true) do |f| %>
    <%= f.text_field :list_id %>
    <%= f.text_field :order %>
<% end %>

在卡片显示页面中,将编辑操作的链接添加为

<%= link_to "Edit", edit_card_path(card.id) %>

【讨论】:

  • 但我没有使用编辑操作。一切都位于墙上/展示动作。在用户与之交互之前,我不知道正在保存哪条记录。
  • 所以,我认为您正在尝试使用 AJAX 方式来做到这一点。希望 [codediode.io/lessons/… 对您有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-02
  • 2016-03-14
  • 1970-01-01
相关资源
最近更新 更多