2011-08-14 50 views
0
def create 
    msg = current_user.msgs.build(params[:msg]) 
    msg.message = msg.message 
    msg.created_at = Time.now # HACK 
    if msg.save 
    else 
     flash[:error] = "Your article must contain some text." 
    end 
    redirect_to root_path 
    end 

這是我的控制器代碼保存消息,它的工作之前,我試過rails g migration add_anonymous_to_msg anonymous:booleanrake db:migrate現在我得到的錯誤「您的文章必須包含一些文本」,這意味着該消息不再被保存或文字不被認可。我試圖刪除列和我的schema.rb說,它不再存在,但錯誤仍然存​​在。向rails數據庫添加布爾列防止消息被保存?

有誰知道可能是什麼問題?謝謝

+0

您使用的是哪個版本的Rails?爲什麼你覺得需要破解'created_at'時間?您的模型和遷移也會有所幫助。 –

+0

也許你可以試試'flash [:error] =「你的文章必須包含一些文本。{msg.errors.collect {| attr,msg | [attr,msg] .join(」:「)}。join(」 ,「)}」'看看問題出在哪裏。 (編輯:有一個}和一個連接失蹤) –

回答

1

如何:

def create 
    @message = current_user.messages.build(params[:message]) 
    unless @message.save 
    flash[:error] = "Your article must contain some text." 
    end 
    redirect_to root_path 
end 

消除了對空,如果塊的需要。

+0

該列仍在表上?你是否將它設置爲非空欄並且不是默認欄? –

+0

不,schema.rb表示該列不在表中了。 – user852974

+0

你可以檢查實際的數據庫表。您可以執行'describe TABLENAME'來獲取表格上的信息。 –

0

我真的認爲需要重寫你的控制器,它很難閱讀,並且有很多你不需要的代碼。嘗試這樣的:

def create 
    @message = Message.new(params[:message]) 
    if @message.save 
    else 
    flash[:error] = "Your article must contain some text." 
    end 
    redirect_to root_path 
end 

其次,當您提交表單時,日誌中最有可能出現錯誤消息。任何機會,你可以張貼?

+0

這不關心當前的用戶ID,這是不是一個好東西存儲在窗體上。也許current_user.msgs.new(params [:message])會起作用。 –

+0

'current_user'經常被使用,它應該從幫助程序中調用,然後在需要將用戶分配給像這樣的對象時被引用:'@message.user = current_user'感謝您簡化代碼,但它仍然不會工作。問題是由於向數據庫添加了布爾列造成的,它阻止了@message保存,導致flash [:error] –

0

你真的需要這條線

flash[:error] = "Your article must contain some text."

從你就會知道什麼確切地知道是什麼問題,該錯誤信息更改爲

flash[:error] = msg.errors.full_message