这个更新过程有些不同,我需要更新查询里面的循环,但显示这个错误:
undefined方法`update_attributes '
这是代码:
<%= link_to "Accept", apply_path(accept:{:accept => 1}), :method => :put, class: "btn btn-success" %>
控制器:
def update
@accept = Applied.where(params[:applied_id])
params.permit!
if @accept.update_attributes(params[:applied_id])
#flash[:notice] = "updated"
render 'apply'
else
render 'apply'
end
end
请求参数:
Copyright © 2018 - 2019 www.jsjs.com All Rights Reserved.粤ICP备15048888号-1
如何找到解决方案?
5条答案
按热度按时间rkkpypqq1#
您只能为单个模型示例(记录)调用update_attributes,而不能为ActiveRecord::Relation对象(它类似于记录数组)调用。
用途:
或
请注意,如果您没有其他配置,find会在model表的id字段中查找您的applied_id。
请注意update_attributes会消耗您想要更新的“field:value”对({field_1_name:field_1_value,field_2_name:field_2_value})的散列,而不仅仅是单个applied_id。
qvk1mo1f2#
优行
返回一个ActiveRecord关系,它显然没有方法
update_attributes
。要获取单个记录,请使用first
或find
:lvjbypge3#
继续我们的评论。
我不知道实际上
accept
是什么,实际上你想做什么specically,但是,就像我的理解,尝试更新您的链接href。它应该看起来像:更新您的操作如下:
z9smfwbn4#
问题是您正在尝试更新一个没有可用的
update_attributes
方法的collection
(where
)。你需要的是
.find
:applied_id
参数(因此find
将无法工作);您需要使用以下路线:更好的方法是使用
button_to
:如果你使用上面的方法,你必须在你的控制器中改变你的
params
方法。如果你想使用
.where
(用于多条记录),你需要使用update_all
:avwztpqn5#
如果您在Rails 6之后发现此错误,则是因为
update_attributes
已被弃用,并已简单地替换为update
per https://github.com/rails/rails/pull/8705。更新电话直接为我解决了问题。