Rails - 有没有办法更新单个属性?

Posted

技术标签:

【中文标题】Rails - 有没有办法更新单个属性?【英文标题】:Rails - Is there a way to update a single attribute? 【发布时间】:2011-05-22 18:31:36 【问题描述】:

我只是想知道,我有一个模型,除了来自其他模型 (FK) 的 id 之外,它还有一个属性 boolean。我想知道如何创建一个按钮来改变这个boolean 和只是那个

我有问题的模型是这个:

class Squad
 belongs_to :player
 belongs_to :team
end

我想在team#show 页面上创建一个按钮,以便拥有此teamplayer 可以更改squadboolean。我该怎么做?我的控制器看起来如何?

谢谢:)!

-编辑-

我正在使用这样的链接:

<%=link_to("Change status", squad_path(sqd, :status => true), :method => :put, :confirm => "Sure?")%>

sqd 是我查询的一部分。这个链接错了吗?

【问题讨论】:

【参考方案1】:
<%= link_to("Change status", squad_path(sqd, "squad[status]" => true), :method => :put, :confirm => "Sure?") %>

在您的控制器中(这很常见)

def update
  @squad = Squad.find params[:id]
  if @squad.update_attributes params[:squad]
    ...
  end
end

【讨论】:

谢谢!那是缺少的部分:) @Aditya Sanghi,是的,这当然只是一个错误类型,这不是答案的重点 我认为问题的重点是如何更新模型上的单个属性而不是多个。不管很高兴海报得到了解决方案。 :) 干杯 @fl00r 的回答帮助我找出了我的错误。我在没有控制器中的方法的情况下做到了。 &lt;% boolval_state = modelname.boolval ? "Y" : "N"; boolval_flip = modelname.boolval ? false : true; %&gt;&lt;%= link_to boolval_state, modelname_path(modelname, "modelname[boolval]" =&gt; boolval_flip), method: :put %&gt;【参考方案2】:

是的,有。该方法称为“update_attribute”。它有两个参数,字段名和值。

  squad.update_attribute(:boolean_field,true) # or false

基于更新的问题

def update
  @squad = Squad.find(params[:id])
  if @squad.update_attribute(:status,params[:status])
    ...
  end
end

【讨论】:

感谢您的回答:)。我正在尝试创建指向它的链接但不起作用,它正在更新页面中的所有模型:/我有一个查询要找到有问题的小队,你认为这是最好的方法还是有其他可能的我能做什么?【参考方案3】:

你的属性名称是什么?

由于它属于player,您可以使用player.squad.name_of_your_attributes = new_value 访问它。如果您希望将更改保存在数据库中,请不要忘记 save 您的对象。

另外,你可以阅读that

编辑:fl00r 回答了你编辑的问题,我不需要重复他写的内容。

【讨论】:

感谢您的回答。我编辑了我的问题。你能把我的链接改成你建议的吗? :)

以上是关于Rails - 有没有办法更新单个属性?的主要内容,如果未能解决你的问题,请参考以下文章

保存 Rails 模型的所有属性

如何更新单个 Firebase Firestore 文档

Rails 3 从单个数据库表生成种子文件

有没有办法在 url 更改时更新在单个 spa 中注册的应用程序的历史位置?

我啥时候使用保存!,创建!和更新属性!在 Rails 中?

Rails:从自定义验证器调用标准验证