将其他数据添加到ActiveRecord对象

Joe*_*cha 3 json ruby-on-rails attr-accessor

我正在检索"Widget"ActiveRecord对象:

@widget = Widget.find(params[:id])
Run Code Online (Sandbox Code Playgroud)

我想在返回之前添加一些额外的数据,所以我使用以下方法添加它:

@widget.display_name = "test display name"
Run Code Online (Sandbox Code Playgroud)

我可以做puts @widget.display_name,这确实显示"测试显示名称",但是当我调用puts @widget.inspect它时不包括额外的数据.

我原来得到:

NoMethodError (undefined method `display_name=' for # <Widget:0x007fe6147e8e00>):
Run Code Online (Sandbox Code Playgroud)

但我包含attr_accessor :display_name在Widget模型中,并停止了该特定消息.

为了清楚起见,我实际上并不想将这些额外的数据存储在数据库中,而只是将其作为JSON对象返回.我正在使用JSON渲染render json: @widget, status: :ok,这也不包括额外的数据.

为清楚起见,这是我的代码:

def show
    @widget = Widget.find(params[:id])
    @widget.display_name = "test display name"
    puts @widget.display_name # displays "test display name"
    puts @widget.inspect
    if @widget
      render json: @widget, status: :ok
    else
      head :not_found
    end
  end
Run Code Online (Sandbox Code Playgroud)

Zor*_*ran 6

您可以尝试合并display_nameinto @widget的属性:

@widget = @widget.attributes.merge(display_name: "test display name")
render json @widget
Run Code Online (Sandbox Code Playgroud)

上面应该返回一个@widget属性的JSON对象,包括指定的display_name.

希望能帮助到你!