我的Message
模型有一个布尔from_posting?
属性,默认为false
。
在某些情况下,我希望在保存邮件之前将此attr设置为true
。
def create
@message = current_user.sent_messages.build(message_params)
if params[:reply] == 'true'
@message.from_posting? = true
end
if @message.save
render json: @message, status: 200, serializer: MessageSerializer
else
render json: @message.errors, status: 400
end
end
但是@message.from_posting? = true
会引发unexpected =
错误。我可以@message.title ='something'
,但为什么我不能使用attr_accessor
来设置当attr以?
结尾时的布尔值?
我考虑过保存记录,然后在需要时更新from_posting?
,但这似乎是一个额外的db写入。我尝试使用@posting.toggle(from_posting?)
,但也会在from_posting?
上引发错误。
答案 0 :(得分:3)
我强烈建议在评论中提出重构。重命名from_posting? from_posting字段是正确的行动方式。
如果无法使用重构,您应该能够使用:
send('from_posting?=', true)
或
write_attribute('from_posting?', true)
或
@message['from_posting?'] = true
最后一个选项是第二个选项的别名。
David Verhasselt撰写了关于设置ActiveRecord属性here的不同方法的精彩文章。