我需要在我的模型中保存已处理的数据以将其渲染为json,但我得知该方法缺失,所以有时间提出一个愚蠢的问题。
模型
class Post < ActiveRecord::Base
def self.html(html)
@html = html
end
end
控制器
# POST /posts
# POST /posts.json
def create
@post = Post.new(post_params)
respond_to do |format|
if @post.save
@post.html render_to_string(partial: 'post.html.erb', locals: { post: @post })
format.html { redirect_to @post, notice: 'Post was successfully created.' }
format.json {
render :show,
status: :created,
location: @post
}
else
format.html { render :new }
format.json { render json: @post.errors, status: :unprocessable_entity }
end
end
end
错误
NoMethodError - undefined method `html' for #<Post:0x0000000a5679d0>:
那是因为在构建器中我想输出
json.extract! @post, :id, :content, :created_at, :updated_at, :html
我可能会以另一种方式做到这一点,但现在我很好奇,我错过了什么?
答案 0 :(得分:1)
只需添加常规的getter / setter:
class Post < ActiveRecord::Base
def html
@html
end
def html=(html)
@html = html
end
end
您可能也想要一个实例方法,因为您正在使用Post
的实例(之前称为Post.new
。
答案 1 :(得分:0)
在post模型上定义方法html
时,您将创建一个类方法,而不是实例方法。您需要删除self
,并通过添加=
:
class Post < ActiveRecord::Base
def html=(html)
@html = html
end
end