从哈希参数中获取价值

时间:2014-02-06 13:45:24

标签: ruby-on-rails hash

此时我在部分“_form.html.erb”

中有此字段
<% Pregunta.where("subpoll_id = ?", s.id).each.with_index do |i, index| %>
    <tr>
    <td>
            <%= f.input :descripcion, 
            :label => false, 
            :error => false,
            :input_html => {
            :name     => "pregunta[]",
            :class    =>'form-control input-sm',
            :value    => "#{i.descripcion}",
            :readonly => true,
            :style    => "
                border:hidden;
                background-color:white;"} %>
    </td>
    <td width="15%">
        <%= f.input :respuesta,
                :collection => Respuesta.where("pregunta_id = ?", i.id),
            :label      => false,
            :error      => false,
            :input_html => {
            :class =>'form-control input-sm',
            :name => "respuesta[]"} %>
    </td>
    </tr>

所以当你看到我得到一个这个:name => "respuesta[]"的哈希值,因为该字段会根据“preguntas”的数量重复显示

从我的控制器我以这种方式获取信息

@respuesta  = params[:respuesta]

我的问题是: 如何获取此哈希的特定值以将其保存在列表中并将其与另一个值进行比较

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

使用以下内容可能会有所帮助:

@respuesta.each_with_index do |(respuesta_key, respuesta_value), index|
   puts "Respuesta: #{index}" 
   puts "Key: #{respuesta_key}"
   puts "Value: #{respuesta_value}"
end

答案 1 :(得分:1)

您获得的身份更少的数组值,您可以使用以下稍微更改为每个值赋予身份,这些更改将作为哈希数组发布:

<% Pregunta.where("subpoll_id = ?", s.id).each.with_index do |i, index| %>
  .
  <%= f.input :respuesta,
    .
    :name => "respuesta[#{i.id}]"} %>
    .

你将获得以下形式的参数:

{respuesta: [{pregunta_id: respuesta_value}, {pregunta_id: respuesta_value} .. ]}

稍后,您可以通过以下方式获取特定值:

params[:respuesta].each do |key_val|
  Pregunta.find(key_val[0]).update_attribute('respuesta', key_val[1])
end

如果您需要更多级别的respuesta值,您可以这样做:

<%= f.input :respuesta, :collection => Respuesta.
  where("pregunta_id = ?", i.id).collect{|r| [r.val, r.id] }, ... 

稍后您可以通过以下方式获取特定的respuesta值:

params[:respuesta][<pregunta_id>][<respuesta_id>]

希望这会有所帮助!