我正在我的项目管理工具中生成RFP插件。在那个插件我基本上填写一个表单有几个usr要求,比如哪个技术有多少资源,小时等....
现在在填写表单后提交表单时,假设我填写表单中的5个字段(可能是文本字段,文本区域,布尔等...)然后提交它将创建5个问题
即表单的第一个字段应该创建第一个问题
表单的第二个字段应该创建第二个问题
第三个字段,如果我在表单中保留空白,那么该问题将无法创建
等等
如果特定密钥
存在值,我想为每个哈希密钥创建新问题一个解决方案是在用户哈希中有许多关键&在填写表单后会出现值,但是如何将每个键值分开并基于应用某些循环并创建新问题
我的参数[:user1]是
{"project_id"=>"first1",
"user1"=>
{"ffval_attributes"=>{"ckval"=>"0"},
"opval_attributes"=>{"ckval"=>"0"},
"jvusedfor"=>"menu sidebar",
"user3_attributes"=>
{"drupal"=>"0",
"wordpress"=>"0",
"joomla"=>"0",
"other2"=>"0",
"Typo3"=>"0"},
"user2"=>
{"cms_ex"=>"ruby", "java"=>"0", "dotnet"=>"0", "other1"=>"1", "php"=>"0"},
"pagenumber_attributes"=>{"uniquepages"=>"3", "subsequentpages"=>"4"},
"gcvals_attributes"=>{"ckval"=>"0"},
"pagetype"=>"false",
"nojavascript"=>"7",
"src_id"=>"",
"numberofmenu"=>"5",
"ss1"=>"0",
"type1"=>"false",
"sfval_attributes"=>{"ckval"=>"0"},
"design_pattern"=>"5",
"dcomplex"=>"no",
"ieval_attributes"=>{"ckval"=>"0"},
"checkpixel"=>"true",
"base"=>"true",
"nohacks"=>"5",
"fuvalue"=>"true",
"mobile"=>"true"},
"utf8"=>"",
"commit"=>"Create User1",
"authenticity_token"=>"UlrGhESPKK6zSr6aL2iIpGt9mR2K5tgBA3NnZP44+XE="}
我试过控制器
u = params[:user1]
a = Issue.last
a = a.id
u.each do |key, value|
if value.present?
issue = Issue.new
issue.id = a + 1
**issue.subject = key**
ssue.tracker_id = 1
issue.project_id = 1
issue.priority_id = 2
issue.status_id = 1
issue.author_id = 1
issue.save
a = a + 1
end
我的问题是
如果它们的值存在,如何在issue.subject上传递嵌套的哈希键 提前致谢
答案 0 :(得分:1)
如果您想根据来自params的用户参数创建Issue
个对象,
首先只选择用户参数
user_params = params.select{|k,v| k.include?('user')}
将选定的user_params
传递给方法,
def get_issue_attribute(user_params)
user_params.each do |key, value|
value.is_a?(Hash) ? get_issue_attribute(value) : create_issue({key => value})
end
end
在上面的方法中使用递归调用来获取user_params
def create_issue(attr)
# Code for issue creation
end
答案 1 :(得分:0)
您可以使用has_key?函数确认散列中是否存在值,然后如果是,则处理数据。
或者,您可以执行以下操作来检查嵌套哈希中是否存在值:
if params[:issue]
if params[:issue][:subject]
# whatever code you want to do
end
end