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
我想添加类似
的内容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?感谢
答案 0 :(得分: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
将其添加到生产数据库中。