如何访问在rails

时间:2017-08-07 13:36:27

标签: ruby-on-rails ruby

我有一个微不足道的问题,但即使在检查stackoverflow 2天后,我还没有找到解决方案。

当我转发params从数据库中读取记录时,所有工作都有效 - 但是我发现没有办法直接访问创建视图对象或列数组的参数。

我在rails控制器中收到以下帖子请求:

Started POST "/views/update" for 127.0.0.1 at 2017-08-07 17:27:51 +0400
Processing by ViewsController#update as HTML
  Parameters: {
    "view"=>{
      "id"=>1, 
      "name"=>"All Opportunties", 
      "columns"=>[
        {
          "id"=>1, 
          "label"=>"Name", 
          "fieldNameOrPath"=>"name", 
          "typ"=>"link", 
          "linkp"=>"id", 
          "link"=>"/opportunities/proposal/general", 
          "entity_id"=>1, 
          "hidden"=>true, 
          "created_at"=>"2017-08-06T22:12:03.000Z", 
          "updated_at"=>"2017-08-06T22:12:03.000Z"
        }, 
        {
          "id"=>2, 
          "label"=>"Account", 
          "fieldNameOrPath"=>"account.name", 
          "typ"=>"link", "linkp"=>"account_id", 
          "link"=>"/accounts", 
          "entity_id"=>1, 
          "hidden"=>false, 
          "created_at"=>"2017-08-06T22:12:03.000Z", 
          "updated_at"=>"2017-08-06T22:12:03.000Z"
        },
        {
          "id"=>3, 
          "label"=>"Owner", 
          "fieldNameOrPath"=>"user.username", 
          "typ"=>"string", 
          "linkp"=>nil, 
          "link"=>nil, 
          "entity_id"=>1, 
          "hidden"=>false, 
          "created_at"=>"2017-08-06T22:12:03.000Z", 
          "updated_at"=>"2017-08-06T22:12:03.000Z"
        },
        {
          "id"=>4, 
          "label"=>"Close Date", 
          "fieldNameOrPath"=>"closedate", 
          "typ"=>"datetime", 
          "linkp"=>nil, 
          "link"=>nil, 
          "entity_id"=>1, 
          "hidden"=>false, 
          "created_at"=>"2017-08-06T22:12:03.000Z", 
          "updated_at"=>"2017-08-06T22:12:03.000Z"
          }, 
          {
            "id"=>5, 
            "label"=>"Stage", 
            "fieldNameOrPath"=>"stage", 
            "typ"=>"string", 
            "linkp"=>nil, 
            "link"=>nil, 
            "entity_id"=>1, 
            "hidden"=>false, 
            "created_at"=>"2017-08-06T22:12:03.000Z", 
            "updated_at"=>"2017-08-06T22:12:03.000Z"
          }
        ]
      }
    }

理想情况下,我希望将接收到的参数放在一个名为view的对象中,从中可以访问其属性 - 特别是columns数组。我的对象结构是:

View { id, name, columns [{id, label ...}] }

我想遍历所有列:

view.columns.each do |column|
  column.name = ...
end

它看起来非常基本,但我尝试将params分配给视图(或仅为列创建对象)的所有方法都失败了。大部分时间我收到错误消息method xxx of view未知。

感谢您的帮助!

3 个答案:

答案 0 :(得分:0)

这样的事情应该有效:

view = params[:view]

view[:columns].each do |column|
  column[:name] = ...
end

也就是说,这感觉就像代码可能比控制器更适合模型。

答案 1 :(得分:0)

参数将通过params对象作为哈希:

进行访问
params['view']['id']    # 1
params['view']['name']  # All Opportunities
params['view']['columns'].first['typ']    # link

然而,听起来你需要的更像是“视图”中参数的包装对象。我不知道你的数据的任何细节,但是你可以使用OpenStruct对象基于哈希数据创建简单的对象。

至于创建所述对象以便在控制器中可以访问的实际工作,请考虑在Rails控制器中使用:before_filter来使用params中的数据作为输入来创建对象。 / p>

答案 2 :(得分:0)

试试这个:

params['view']['columns'].each do |column|
  puts column['id']
end

这将在控制台中打印每个id的{​​{1}}:

column