我正在尝试通过 Rails 中的更新操作来更新布尔值,尽管我一生都无法让它工作。
我Users
有一个questionnaire_complete
默认为 false 的布尔字段。当他们更新他们的调查问卷(提交它 - 它是在其他地方创建的)时,我告诉控制器将其切换为 true,以使他们能够在其他地方重新提交。
def update
if @user.form_reached # Another boolean used for path control - which works perfectly with the same toggle!
current_user.toggle!(:questionnaire_complete) # The failing line
SomeMailer.submission_confirmation(@user).deliver_now
redirect_to user_answer_path(@user), notice: "Thank you for submitting your form"
end
end
我知道这大部分都是在 Mailer 发送时实现的,并且重定向/通知完全按照它们应该的方式工作。唯一缺少的是(至关重要的)切换。
表单本身很简单simple_form_for @user
,可以完全按照应有的方式更新属性。
这只是切换。这太痛苦了。任何建议都受到热烈欢迎:)
更新
我已将其更改为将隐藏字段放入表单中,以便更仔细地检查参数。我感觉这可能是因为我也在更新表单中的嵌套属性,因为参数看起来与使用这种方法应该完全一样:
形式:
<%= simple_form_for @user do |user| %>
<%= user.input :questionnaire_complete, :as => :hidden, :input_html => { :value => true } %>
<%= user.simple_fields_for :user_answers do |user_answer| %>
<li>
<%= user_answer.text_field :answer %></br>
</li>
<% end %>
<%= user.submit %>
<% end %>
参数:
"user"=>{"questionnaire_complete"=>"true", "user_answers_attributes"=>{"0"=>{"answer"=>"example", "id"=>"194"}...}