2013-10-11 33 views
0

我在我的項目管理工具中生成RFP插件。在那個plugIn中,我基本上填寫了一個表格,幾乎沒有usr要求,比如哪個技術有多少資源,時間等... 。如何傳遞嵌套的鍵到rails的對象params

現在填充之後submmitting形式時,假設我填表5場(可能是文本字段,文本區域,布爾型等等...),那麼它submmit 5個問題將被創建

即表單的第1個字段應創建第1個問題

第2個字段的表單應創建第2個問題

,如果我在的形式,然後wont't創建

和問題保持空白的第3場等

我想每個哈希鍵上創建新的問題,如果值是針對perticular關鍵

一個解決方案是,在用戶哈希有來許多關鍵&值填寫表格後,但怎麼可能在不同的每個鍵值,並基於該應用一些循環和創造新的問題

我PARAMS [: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,如果他們的價值是事先目前 感謝

+1

我努力理解你爲什麼要在這個自定義的方式這樣做的最裏面PARAMS。爲什麼不使用'accep_nested_attributes_for'? http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html –

+0

它取決於提交的領域的形式!!!!! – Anish

回答

1

如果您想根據對從PARAMS過來然後用戶參數創建Issue對象,

PARAMS

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 
+0

感謝哥們,它的工作原理 – Anish

0

您可以使用has_key?函數來確認散列中是否存在值,然後是否處理該數據。

或者你可以做這樣的事情,以檢查是否你的嵌套的散列中存在的值:

if params[:issue] 
    if params[:issue][:subject] 
     # whatever code you want to do 
    end 
end 
+0

男子PLZ再次閱讀我的帖子 – Anish

+0

更新我的回答 –

+0

我試過相同的但嵌套的鍵值存在,我怎麼檢查我可以檢查?如果您再次更新 – Anish