【问题标题】:Ruby On Rails:recieve json, parse and save in databaseRuby On Rails:接收 json,解析并保存在数据库中
【发布时间】:2014-11-18 21:41:04
【问题描述】:

我想将 json 发布到 rails 控制器,然后通过单独的控制器将每个 json 保存到数据库。

为此,我将此 json 发布到 rails 控制器:

            jsonList = {
                "table": {column1:"column1",column2:"column2"},
                "record": {name:"record 1"}
            };

并在 Rails 控制器中收到以下 json:

Started POST "/api/calculate.json" for 127.0.0.1 at 2014-11-19 00:52:13 +0330
Processing by Api::V1::CalculateController#create as JSON
  Parameters: {"table"=>{"column1"=>"column1", "column2"=>"column2"}, "record"=>{"name"=>"record 1"}, "calculate"=>{"table"=>{"column1"=>"column1", "column2"=>"column2"}, "record"=>{"name"=>"record 1"}}}

但是在我做任何事情之前,我在 Rails 服务器日志中得到以下错误:

Completed 500 Internal Server Error in 2ms

ActionView::MissingTemplate (Missing template api/v1/calculate/create, api/v1/base/create with {:locale=>[:en], :formats=>[:json], :variants=>[], :handlers=>[:erb, :builder, :raw, :ruby, :coffee, :jbuilder]}. Searched in:
  * "/Users/mgh/Documents/Maliat/sama/app/views"
):
  actionview (4.1.6) lib/action_view/path_set.rb:46:in `find'
  actionview (4.1.6) lib/action_view/lookup_context.rb:124:in `find'
  actionview (4.1.6) lib/action_view/renderer/abstract_renderer.rb:18:in `find_template'
  actionview (4.1.6) lib/action_view/renderer/template_renderer.rb:41:in `determine_template'

我搜索此错误,但没有找到任何有用的指南。

RailsController:

class Api::V1::CalculateController < Api::V1::BaseController
  require 'json'
  def create
    ....
  end
end

我还有一个问题。我想通过单独的控制器将每个 json 保存到数据库中。例如,我有一个 RecordController 并通过以下代码使用 create 操作:

def create
    temp = Record.new(params[:record])
    temp.save
end

这种类型:

def create
   temp = Record.create(params[:record])
end

但我在服务器日志中收到以下错误

ActiveModel::ForbiddenAttributesError (ActiveModel::ForbiddenAttributesError):
  app/controllers/api/v1/calculate_controller.rb:6:in `create'

RecordController:

class Api::V1::RecordController < Api::V1::BaseController
  require 'json'
  def create
    @data = Record.create(record_params)
    @data.save
    respond_with(@data)
  end
  private
  def record_params
    params.require(:record).permit(:name)
  end
end

我该如何解决这个问题?

【问题讨论】:

  • 你能给我模型(计算)字段和结构吗?您必须在哪个表中存储表格和记录内容。
  • 我没有calculate Model,我只想在这个控制器中从客户端获取json,并使用其他控制器将数据保存在json中,比如我发布的record。注意:我在客户端使用 angularjs。
  • 所以这是 json { "table": {column1:"column1",column2:"column2"}, "record": {name:"record 1"} };你想在哪里存储到数据库???
  • 起初我想要单独的 2 个 json,然后将它们分别发布到特殊的控制器中。例如,我想通过 RecordController 将 "record":{name:"record 1"} 保存在数据库中,我将这个控制器置于问题中,并使用与 RecordController 相同的控制器保存 "table"

标签: ruby-on-rails json ruby-on-rails-4


【解决方案1】:

您需要查看 Rails 中强参数功能的使用。这里也回答了类似的问题:Active Model Forbidden attributes error

【讨论】:

    【解决方案2】:

    为什么要拆分 JSON 并发送到两个单独的控制器,而不是创建一个控制器方法并解析 JSON 并存储到数据库中,

    JSON 格式:

    {
      "table": {column1:"column1",column2:"column2"},
      "record": {name:"record 1"}
    };
    

    控制器方法:

    def create_record_and_table
      record = params[:record]
      @record = Record.new(:name => record['name'])
      @record.save
    
      table = params[:table]
      @table = Table.new(:column1 => table['column1'], :column2 => table['column2'])
      @table.save
    end
    

    【讨论】:

    • 每个 json 有 10 多个元素。这个 json 只是这个问题的示例。我现在做这种风格,但如果可以的话,我必须改变这种方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多