ruby-on-rails - Rails - 更新未选中的复选框时缺少参数(作为 nil 值)

标签 ruby-on-rails forms checkbox parameter-passing form-for

我遇到了表单中某些复选框的问题,因为当它们未经选中而提交时,我收到错误param is Missing or the value isempty: user

我不明白为什么要这样做;在大多数情况下,这个问题是由于没有在隐藏字段中定义空白框而引起的,而我已经得到了。

值得注意的是,当选中某些内容时,复选框可以完美工作。

这是复选框代码(@user 是标准的 User.find(params[:id])):

       <%= form_for(@user) do |f| %>
          <h2>Add your dietary requirements:</h2>
          <div class="field">
                <% hidden_field_tag "user[dietary_requirement_ids][]", nil %> <!-- a lack of this field often seems to generate this problem -->
                <% DietaryRequirement.all.each do |dietary_requirement| %>
                  <%= check_box_tag "user[dietary_requirement_ids][]", dietary_requirement.id, @user.dietary_requirement_ids.include?(dietary_requirement.id), id: dom_id(dietary_requirement) %>
                  <%= label_tag dom_id(dietary_requirement), dietary_requirement.name %><br>
                <% end %>
              </div>
              <%= f.submit "Update your account", class: "btn btn-primary" %>
        <% end %>

当检查某些内容时,参数会正确传递,如下所示:

Parameters: {"user"=>{"dietary_requirement_ids"=>["2"]}, "commit"=>"Update your account", "id"=>"2"}

虽然没有选择任何内容,但他们错误地提交如下:

Parameters: {"commit"=>"Update your account", "id"=>"2"}

令人沮丧的是,到目前为止,这些复选框对我来说工作得很好,今天开始抛出错误 - 没有明显的变化应该影响这个。

我查了一下,找不到解决我的具体问题的方法 - 有人能帮忙吗?!

谢谢大家,史蒂夫。

编辑

这是来自 Controller 的参数:

def user_params
  params.require(:user).permit(:first_name, :surname, :email, :password, :password_confirmation, :phone, :age, :address, :city, :postcode, :country, { :dietary_requirement_ids => [] })
end

以及编辑/更新操作(如果它们有用):

def edit
    @user = User.find(params[:id])
    @fridge = @user.fridge
end

def update
    @user = User.find(params[:id])
    @fridge = @user.fridge
    if @user.update_attributes(user_params)
      flash[:success] = "Profile updated"
      redirect_to @user
    else
      redirect_to edit_user_path(@user)
    end
end

最佳答案

最终需要进行微小的编辑才能解决此问题。隐藏字段中缺少 =,这意味着它没有加载到 html 中。这是修复的代码,以防将来有人访问。

        form_for(@user) do |f| %>
          <h2>Add your dietary requirements:</h2>
          <div class="field">
                <%= hidden_field_tag "user[dietary_requirement_ids][]", nil %>
                <% DietaryRequirement.all.each do |dietary_requirement| %>
                  <%= check_box_tag "user[dietary_requirement_ids][]", dietary_requirement.id, @user.dietary_requirement_ids.include?(dietary_requirement.id), id: dom_id(dietary_requirement) %>
                  <%= label_tag dom_id(dietary_requirement), dietary_requirement.name %><br>
                <% end %>
              </div>
              <%= f.submit "Update your account", class: "btn btn-primary" %>
        <% end %>

你可能认为我已经从我在问题中的评论中得出了这一点。啊好吧 - 一切都好,结局好!

关于ruby-on-rails - Rails - 更新未选中的复选框时缺少参数(作为 nil 值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28587349/

相关文章:

ruby-on-rails - railsinstaller 有问题

javascript - React - 子组件能否将值发送回父表单

javascript - 如何在rails中保存多个复选框值?

javascript - 如果所有复选框都未选中,则禁用按钮,如果至少选中一个,则启用它

ruby-on-rails - 使用 acts-as-taggable-on 查找相关标签

ruby-on-rails - rails 5 : error passing time_ago_in_words from controller to view

php - 是否可以保存表单中的 php 值以供进一步使用?

javascript - 按键输入后清除文本字段

php - PHP foreach后返回不同的输入

mysql - 如何选择 Rails 中以数字开头的行?