2014-09-23 69 views
1

我有一個Message模型,其布爾型from_posting?屬性默認爲false更新boolean 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?如果我需要,但這只是看起來像一個額外的數據庫寫入。我嘗試使用@posting.toggle(from_posting?),但也會在from_posting?上拋出錯誤。

+0

是屬性名稱from_posting還是from_posting ?,通常應該將屬性from_posting命名爲不以問號結尾。 – Thresh 2014-09-23 13:46:03

+0

這是from_posting?與問號。我認爲最好的做法是用問號來命名boolean attr? – user2936314 2014-09-23 13:46:45

+1

不是最好的做法是結束方法返回帶有問題的布爾值,順便說一句,這是通過rails自動添加的。所以如果你有一個名爲from_posting的布爾字段(不帶尾隨問號),rails會添加from_posting的助手嗎?這是您可以使用的一種方法(在控制檯中嘗試它)。 – Thresh 2014-09-23 13:50:08

回答

3

我強烈建議在評論中提出重構。重命名from_posting?字段到from_posting是正確的行爲。

如果重構是不可能的,你應該可以使用:

send('from_posting?=', true) 

write_attribute('from_posting?', true) 

@message['from_posting?'] = true 

最後一個選項是的別名第二。

David Verhasselt對設置ActiveRecord屬性here的不同方式進行了很好的說明。

+0

歡呼,是的重構不會太糟,因爲助手添加了'?'方法。我主要關心的是重構有角度的一面,因爲它全面使用了'?'attrs – user2936314 2014-09-23 14:37:29