从check_box更新属性

时间:2015-06-09 16:04:40

标签: ruby-on-rails ruby activerecord

我在我的第一个Ruby on Rails应用程序中使用嵌套模型,现在我遇到了一个问题。我有一个调查模型has_many:问题反过来属于:调查和模型问题has_many:答案。我的答案模型然后属于:问题。

现在我想更新一个布尔属性:猜测我的:答案控制器。为此,我创建了一个新动作:quiz_guess,如下所示:

      def quiz_guess
         Answer.update(params[:id], guess: false)
             puts("Guess saved")
         redirect_to(:action => 'show', :id => @survey.next, :survey_id => @survey.id)  
      end

我的观点如下:

    <%= form_tag quiz_guess_questions_path, :method => :put do %>   
       <% for question in @survey.questions do %>
         <li><%= h question.content %></li>
            <% for answer in question.answers do %>
                <li><%= h answer.content %>
                   <%= form_for :guess do |f| %>
                     <%= f.check_box(:guess, :method => :put) %>
                   <% end %>
                </li>
            <% end %>
       <% end %>
    <% end %>

显然我已经阅读了documentation以及此blog post,但我不明白如何在我的控制器和视图中实现它。

使用此代码,我无法更新正确的:guess属性,而是更新另一个(使用不同的:id)。谁能解释一下我做错了什么?

1 个答案:

答案 0 :(得分:0)

我最终看到了这个Railscast,其中Ryan Bates展示了如何使用fields_for更新多个属性。这是我的新观点:

   <%= form_tag quiz_guess_questions_path, :method => :put do %>
     <% for question in @survey.questions do %>
        <li><%= question.content %></li>
         <% for answer in question.answers do %>
          <li>
            <%= fields_for "answers[]", answer do |f| %>
              <%= answer.content %>  
              <%= f.check_box :guess %>    
            <% end %>
          </li>
         <% end %>
     <% end %>
    <%= submit_tag "Guess" %>
   <% end %>

和我的新控制器:

  def quiz_guess
     Answer.update(params[:answers].keys, params[:answers].values)
     flash[:notice] = "Guess saved successfully."
     redirect_to questions_url
  end