【问题标题】:HOW can i write the following statements through loop in ruby我如何在 ruby​​ 中通过循环编写以下语句
【发布时间】:2021-12-09 05:06:23
【问题描述】:
 CmsService::SearchContentPractiseProblems.form_fields.each do |field|
          if field[:key].to_s === "answer_a"
              row field[:key] do
                content['answers']['answer_a']
              end
          elsif field[:key].to_s === "answer_b"
              row field[:key] do
                content['answers']['answer_b']
              end
          elsif field[:key].to_s === "answer_c"
              row field[:key] do
                content['answers']['answer_c']
              end
          elsif field[:key].to_s === "answer_d"
              row field[:key] do
                content['answers']['answer_d']
              end
          else
            row field[:key] do
              content[field[:key].to_s]
            end
          end

如果 elsif 通过循环,我想在此处编写以下内容,但我一直无法获得解决方案,有人可以帮助我吗

我的表单域是:

 def self.form_fields
   [
    { key: :code, label: "Code"},
    { key: :ordering, label: "Ordering"},
    { key: :content, label: "Practise Question", editable: true},
    { key: :answer_a, label: "Answer A", editable: true},
    { key: :answer_b, label: "Answer B", editable: true},
    { key: :answer_c, label: "Answer C", editable: true},
    { key: :answer_d, label: "Answer D", editable: true},
    { key: :explaination, label: "Answer Exp.", editable: true}
  ]
end

处理g后我想要的响应是

{     
    "code": "ascending-order-pq-1",
    "content": "Arrange the following numbers in ascending order.\n22, 2322, 2222, 222",
    "ordering": 1,
    "answers": {
        "answer_b": "22 < 222 < 2222 < 2322",
        "answer_a": "22 < 222 < 2322 < 2222",
        "answer_d": "2322 < 2222 < 222 < 22",
        "answer_c": "22 < 2222 < 222 < 2322"
    },
    "correct": "answer_b",
    "explaination": "While comparing multi-digit numbers, the numbers with the least number of digits come first. For multi-digit numbers with the same number of digits, we compare digits from left to right."
}

【问题讨论】:

  • 可能是answers = ['answer_a', 'answer_b', 'answer_c', 'answer_d']; f = field[:key].to_s; if answers.include?(f); row field[:key] { content['answers'][f] }; else; row field[:key] { content[field[:key].to_s }; end

标签: ruby-on-rails ruby loops maps activeadmin


【解决方案1】:

你的代码应该压缩成这样:

CmsService::SearchContentPractiseProblems.form_fields.each do |field|
  answer_fields = %w[answer_a answer_b answer_c answer_d]

  row field[:key] do
    key = field[:key].to_s
    if answer_fields.include?(key)
      content['answers'][key]
    else
      content[key]
    end
  end
end

请测试一下。

%w[a b c] 相当于 Ruby 中的 ["a", "b", "c"]

if-else-end 控制结构只是在一天结束时返回一些东西,所以

row field[:key] do
  if condition
    something
  else
    something_else
  end
end

等价于

if condition
  row field[:key] do
    something
  end
else
  row field[:key] do
    something_else
  end
end

但第一个更紧凑,更不容易出错

【讨论】:

  • 感谢这在尝试了很多东西后对我有用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-07
  • 1970-01-01
相关资源
最近更新 更多