Tim*_*ord 3 ruby-on-rails ruby-on-rails-3
我有一个名为Post的模型,我在模型中创建了两个对字段进行更改的方法.调用save时,第一个方法的更改会保持不变.第二种方法的更改不会被保存.我之前在其他模型中注意到了这种行为,我认为我缺少一些关于模型如何工作的基本知识.任何有关这方面的帮助将不胜感激!
class Post < ActiveRecord::Base
def publish(user) # These changes get saved
reviewed_by = user
touch(:reviewed_at)
active = true
end
def unpublish() # These changes get ignored.
reviewed_by = nil
reviewed_at = nil
active = false
end
end
Run Code Online (Sandbox Code Playgroud)
编辑:
这是控制器的一个片段"
class PostsController < ApplicationController
def publish
if request.post?
post = Post.find(params[:id].to_i)
post.publish(current_user)
redirect_to(post, :notice => 'Post was successfully published.')
end
end
def unpublish
if request.post?
post = Post.find(params[:id].to_i)
post.unpublish()
redirect_to(post, :notice => 'Post was successfully unpublished.')
end
end
...
Run Code Online (Sandbox Code Playgroud)
更新 通过向模型中更改的所有属性添加self来解决问题.谢谢Simone Carletti
在publish调用方法touch时,会将更改保存到数据库中.在unpublish,您不会将任何内容保存到数据库中.
如果要更新模型,请确保使用将更改保存到数据库的方法.
def publish(user)
self.reviewed_by = user
self.active = true
self.reviewed_at = Time.now
save!
end
def unpublish
self.reviewed_by = nil
self.reviewed_at = nil
self.active = false
save!
end
Run Code Online (Sandbox Code Playgroud)
此外,确保在设置值时使用self.attribute,否则该属性将被视为局部变量.
| 归档时间: |
|
| 查看次数: |
1168 次 |
| 最近记录: |