用?更新boolean attr在保存之前

时间:2014-09-23 13:41:41

标签: ruby-on-rails

我的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?上引发错误。

1 个答案:

答案 0 :(得分:3)

我强烈建议在评论中提出重构。重命名from_posting? from_posting字段是正确的行动方式。

如果无法使用重构,您应该能够使用:

send('from_posting?=', true)

write_attribute('from_posting?', true)

@message['from_posting?'] = true

最后一个选项是第二个选项的别名。

David Verhasselt撰写了关于设置ActiveRecord属性here的不同方法的精彩文章。