如何在rails模型中保存已处理的数据(get NoMethodError)

时间:2014-10-02 21:52:34

标签: ruby-on-rails ruby

我需要在我的模型中保存已处理的数据以将其渲染为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

我可能会以另一种方式做到这一点,但现在我很好奇,我错过了什么?

2 个答案:

答案 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