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
页面上创建一个按钮,以便拥有此team
的player
可以更改squad
的boolean
。我该怎么做?我的控制器看起来如何?
谢谢:)!
-编辑-
我正在使用这样的链接:
<%=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 的回答帮助我找出了我的错误。我在没有控制器中的方法的情况下做到了。<% boolval_state = modelname.boolval ? "Y" : "N"; boolval_flip = modelname.boolval ? false : true; %>
<%= link_to boolval_state, modelname_path(modelname, "modelname[boolval]" => boolval_flip), method: :put %>
【参考方案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 - 有没有办法更新单个属性?的主要内容,如果未能解决你的问题,请参考以下文章