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

我想添加類似努力創造在軌道的新方法,並得到一個nomethoderror未定義的方法

msg.title = msg.title 
msg.byline = msg.byline 

所以,我可以有一個標題,並與每個消息相關聯的署名,但如果我我得到的錯誤

NoMethodError in Home#index 

    Showing /Users/fred/Desktop/demosite/app/views/home/index.html.erb where line #25 raised: 

    undefined method `title' for #<msg:0x00000104dbcn90> 

如何添加標題和副標題,以便我不獲得nomethoderrors?謝謝

+1

從創建具有db遷移的必要列開始怎麼樣? – apneadiving

+0

請使用一個或兩個標籤,即可標記您的問題。標籤用於對問題進行分類,因此您應該根據您的問題屬於「ruby-on-rails」或「ruby-on-rails-3」來標記它們。 –

回答

1

首先:什麼?

msg = current_user.msgs.build(params[:msg]) 
msg.message = msg.message[0..140] 
msg.created_at = Time.now # HACK 

這使我們感到困惑。你爲什麼要:

1)在模型上限制控制器的消息長度而不是before_save

before_save :only_140_characters 

def only_140_characters 
    self.message = self.message[0..140] 
end 

2)設置created_at自己在控制器?這由Rails自動處理。創建記錄時,created_at字段將由ActiveRecord設置爲一個值。同樣,當你更新記錄時,updated_at也將被設置爲當前時間。 Rails只會在你的字段實際存在的時候這樣做。


現在到真正的問題:爲什麼你得到那個未定義的方法錯誤?

apneadiving在需要添加遷移以將該列添加到messages表的註釋中指出正確。您可以通過運行這個命令做到這一點:

rails g migration add_title_to_messages title:string 

然後通過運行rake db:migrate會該列被添加到數據庫中的表messages。請記住,如果您當時還需要運行RAILS_ENV=production rake db:migrate以將其添加到您的生產數據庫中。

+0

感謝您的幫助。 – user852974

相關問題