Проблемы с получением сериализации для работы в форме - PullRequest
0 голосов
/ 14 марта 2011

У меня есть форма, в которой значения для сериализованного поля выбираются серией раскрывающихся списков.Я боролся с этим довольно много часов, пытаясь заставить его работать хорошо.Есть несколько проблем.

  1. TypeError (expected Hash (got String) for param 'rankings' после отправки.
  2. Как лучше всего отправить эту форму на create, если запись новая, или updateесли он существует?(Показана текущая реализация).

Компания указывает несколько критериев, таких как «общая» или «стоимость» или «производительность».Каждый из этих критериев имеет раскрывающийся список в этой форме.Пользователь выбирает свой рейтинг для каждого из критериев, и результаты сохраняются в @ review.rankings ( serialized ).

    # controller
    @review = Review.find_or_initialize_by_user_id(current_user.id)
    @rankings = @review.rankings # if @review exists, these contain this user's current choices
    @criteria = @company.criteria # each has its own dropdown

    # show.html.erb
    <% @review.id.blank? ? (action = "create") : (action = "update") %>
    <%= form_for @review, :as => :review, :url => params.merge(:controller => "reviews", :action => action, :id => @review.try(:id)) do |f| %>
      <%= f.error_messages %>
      <% @criteria.each do |label| %>
        <%= f.fields_for :rankings do |f| %>
            <%= f.text_field label, :value => @review.rankings.present? ? (@rankings[label]) : nil %>
            <%= label %>:
            <select id="review_rankings_<%= label %>" name="review[rankings][<%= label %>]">
                <option value="0" <%= @rankings.present? && @rankings[label] == "0" ? "selected='selected'" : nil %>>Very poor</option>
                <option value="1" <%= @rankings.present? && @rankings[label] == "1" ? "selected='selected'" : nil %>>Poor</option>
                <option value="2" <%= @rankings.blank? || @rankings[label] == "2" ? "selected='selected'" : nil %>>Average</option>
                <option value="3" <%= @rankings.present? && @rankings[label] == "3" ? "selected='selected'" : nil %>>Good</option>
                <option value="4" <%= @rankings.present? && @rankings[label] == "4" ? "selected='selected'" : nil %>>Very Good</option>
                <option value="5" <%= @rankings.present? && @rankings[label] == "5" ? "selected='selected'" : nil %>>Exceptional</option>
            </select>
        <% end %>
      <% end %>
      <%= submit_tag "Update", :class=>"greenButton" %>
    <% end %>

Источник HTML

<form accept-charset="UTF-8" action="/reviews/21?ci=21&amp;jd=37&amp;rank=1&amp;count=1&amp;key=104fdf0f23712e69e0e7acd507ea4eeb&amp;mkey=e6ec509f1f13ed00f9e0b07b2daeced6" class="review_edit" id="review_edit" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="&#x2713;" /><input name="_method" type="hidden" value="put" /><input name="authenticity_token" type="hidden" value="S89rpLRSqye18RAD3cjdAD83Vvn0oFubooMhA7AX7Ms=" /></div> 


  performance:
<select id="review_rankings_performance" name="review[rankings][performance]"> 
        <option value="0" >Very poor</option> 
        <option value="1" >Poor</option> 
        <option value="2" >Average</option> 
        <option value="3" >Good</option> 
        <option value="4" >Very Good</option> 
        <option value="5" >Exceptional</option> 
  </select> 
  <input class="greenButton" name="commit" type="submit" value="Update" /> 
</form>     
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...