我有一个微不足道的问题,但即使在检查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
未知。
感谢您的帮助!
答案 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